ZGlmZiAtLWdpdCBhLy5naXRodWIvd29ya2Zsb3dzL2NpLnlhbWwgYi8uZ2l0aHViL3dvcmtmbG93cy9jaS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmYwZjAKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aHViL3dvcmtmbG93cy9jaS55YW1sCkBAIC0wLDAgKzEsNDMyIEBACistLS0KKyMgVGhpcyBpcyB0aGUgQ0kgd29ya2Zsb3cgKG5vdCB0aGUgYXJ0aWZhY3QgYnVpbGQvcmVsZWFzZSB3b3JrZmxvdykuIFRoZSB3b3JrZmxvd3MKKyMgYXJlIHNwbGl0IGJlY2F1c2UgR0hBIGRvZXNuJ3Qgc3VwcG9ydCBhIGR5bmFtaWMvY29uZGl0aW9uYWwgbWF0cml4LiBUaGlzIHdvcmtmbG93CisjIGhhcyBzbG93IGpvYnMgYW5kIGpvYnMgdGhhdCByZXF1aXJlIHByaXZhdGUgR0hBIHJ1bm5lcnMgKGVnLCBNMSBNYWMpIGNvbW1lbnRlZCBvdXQuZGVmYXVsdHM6CisjIEVuc3VyZSBjaGFuZ2VzIGFyZSBzeW5jZWQgd2l0aCBtYW51YWxfYXJ0aWZhY3RfYnVpbGQueWFtbC4KK25hbWU6IFB5WUFNTCBDSQorCitvbjoKKyAgcHVzaDoKKyAgcHVsbF9yZXF1ZXN0OgorICAgIHR5cGVzOiBbb3BlbmVkLCBzeW5jaHJvbml6ZSwgZWRpdGVkLCByZW9wZW5lZF0KKyAgd29ya2Zsb3dfZGlzcGF0Y2g6CisKK2VudjoKKyAgTElCWUFNTF9SRVBPOiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9saWJ5YW1sCisgIExJQllBTUxfUkVGOiAwLjIuNQorCitqb2JzOgorICBweXRob25fc2Rpc3Q6CisgICAgbmFtZTogcHl5YW1sIHNkaXN0CisgICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdAorICAgIHN0ZXBzOgorICAgIC0gbmFtZTogQ2hlY2tvdXQgUHlZQU1MCisgICAgICB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYyCisKKyAgICAtIG5hbWU6IEluc3RhbGwgYSBweXRob24KKyAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtcHl0aG9uQHYyCisgICAgICB3aXRoOgorICAgICAgICBweXRob24tdmVyc2lvbjogMy54CisKKyAgICAtIG5hbWU6IEJ1aWxkIHNkaXN0CisgICAgICBlbnY6CisgICAgICAgIFBZWUFNTF9GT1JDRV9DWVRIT046IDEKKyAgICAgICAgUFlZQU1MX0ZPUkNFX0xJQllBTUw6IDAKKyAgICAgIHJ1bjogfAorICAgICAgICBweXRob24gLVYKKyAgICAgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsIGJ1aWxkCisKKyAgICAgICAgcHl0aG9uIC1tIGJ1aWxkIC4KKworICAgICAgICAjIEVuc3VyZSBleGFjdGx5IG9uZSBhcnRpZmFjdCB3YXMgcHJvZHVjZWQuCisgICAgICAgIFtbICQoc2hvcHQgLXMgbnVsbGdsb2I7IGxzIGRpc3QvKi50YXIuZ3ogfCB3YyAtdykgPT0gMSBdXSB8fCB7CisgICAgICAgICAgZWNobyAiVW5leHBlY3RlZCBjb250ZW50IGluIGRpc3QgZGlyOiAnJChscyBkaXN0LyoudGFyLmd6KScuIgorICAgICAgICAgIGV4aXQgMQorICAgICAgICB9CisKKyAgICAtIG5hbWU6IFRlc3Qgc2Rpc3QKKyAgICAgIHJ1bjogfAorICAgICAgICAjIEluc3RhbGwgc29tZSBsaWJ5YW1sIGhlYWRlcnMuCisgICAgICAgICMgVE9ETyBTaG91bGQgd2Ugc21va2UgdGVzdCB0aGUgc2Rpc3QgYWdhaW5zdCB0aGUgbGlieWFtbCB3ZSBidWlsdD8KKyAgICAgICAgc3VkbyBhcHQgdXBkYXRlCisgICAgICAgIHN1ZG8gYXB0IGluc3RhbGwgbGlieWFtbC1kZXYgLXkKKworICAgICAgICAjIEVuc3VyZSBDeXRob24gaXMgbm90IHByZXNlbnQgc28gd2UgdXNlIG9ubHkgd2hhdCdzIGluIHRoZSBzZGlzdC4KKyAgICAgICAgcHl0aG9uIC1tIHBpcCB1bmluc3RhbGwgQ3l0aG9uIC15IHx8IHRydWUKKworICAgICAgICAjIFBhc3Mgbm8gZXh0cmEgYXJncy4KKyAgICAgICAgIyBXZSBzaG91bGQgYXV0by1pbnN0YWxsIHdpdGggbGlieWFtbCBzaW5jZSBpdCdzIHByZXNlbnQuCisgICAgICAgIHB5dGhvbiAtbSBwaXAgaW5zdGFsbCBkaXN0LyoudGFyLmd6IC12CisKKyAgICAgICAgcHl0aG9uIHBhY2thZ2luZy9idWlsZC9zbW9rZXRlc3QucHkKKworICAgIC0gbmFtZTogVXBsb2FkIHNkaXN0IGFydGlmYWN0CisgICAgICB1c2VzOiBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2MgorICAgICAgd2l0aDoKKyAgICAgICAgbmFtZTogZGlzdAorICAgICAgICBwYXRoOiBkaXN0LyoudGFyLmd6CisKKworICBsaW51eF9saWJ5YW1sOgorICAgIG5hbWU6IGxpYnlhbWwgJHt7bWF0cml4LmNmZy5hcmNofX0gJHt7bWF0cml4LmNmZy5wbGF0Zm9ybX19CisgICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdAorICAgIHN0cmF0ZWd5OgorICAgICAgbWF0cml4OgorICAgICAgICBjZmc6CisgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MSwgYXJjaDogeDg2XzY0IH0KKyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiB4ODZfNjQgfQorIyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiBhYXJjaDY0IH0KKyMgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MjAxNCwgYXJjaDogczM5MHggfQorICAgIGVudjoKKyAgICAgIERPQ0tFUl9JTUFHRTogcXVheS5pby9weXBhLyR7e21hdHJpeC5jZmcucGxhdGZvcm19fV8ke3ttYXRyaXguY2ZnLmFyY2h9fQorICAgIHN0ZXBzOgorICAgIC0gbmFtZTogQ2hlY2sgY2FjaGVkIGxpYnlhbWwgc3RhdGUKKyAgICAgIGlkOiBjYWNoZWRfbGlieWFtbAorICAgICAgdXNlczogYWN0aW9ucy9jYWNoZUB2MgorICAgICAgd2l0aDoKKyAgICAgICAgcGF0aDogbGlieWFtbAorICAgICAgICBrZXk6IGxpYnlhbWxfJHt7bWF0cml4LmNmZy5wbGF0Zm9ybX19XyR7e21hdHJpeC5jZmcuYXJjaH19XyR7e2Vudi5MSUJZQU1MX1JFRn19CisKKyAgICAtIG5hbWU6IGNvbmZpZ3VyZSBkb2NrZXIgZm9yZWlnbiBhcmNoIHN1cHBvcnQKKyAgICAgIHVzZXM6IGRvY2tlci9zZXR1cC1xZW11LWFjdGlvbkB2MQorICAgICAgaWY6IG1hdHJpeC5jZmcuYXJjaCAhPSAneDg2XzY0JyAmJiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKworICAgIC0gbmFtZTogQ2hlY2tvdXQgcHl5YW1sCisgICAgICB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYyCisgICAgICBpZjogc3RlcHMuY2FjaGVkX2xpYnlhbWwub3V0cHV0cy5jYWNoZS1oaXQgIT0gJ3RydWUnCisKKyAgICAtIG5hbWU6IEJ1aWxkIGxpYnlhbWwKKyAgICAgIHJ1bjogPgorICAgICAgICBkb2NrZXIgcnVuIC0tcm0KKyAgICAgICAgLS12b2x1bWUgIiQocHdkKTovaW8iCisgICAgICAgIC0tZW52IExJQllBTUxfUkVGCisgICAgICAgIC0tZW52IExJQllBTUxfUkVQTworICAgICAgICAtLXdvcmtkaXIgL2lvCisgICAgICAgICIkRE9DS0VSX0lNQUdFIgorICAgICAgICAvaW8vcGFja2FnaW5nL2J1aWxkL2xpYnlhbWwuc2gKKyAgICAgIGlmOiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKworICAgIC0gbmFtZTogZW5zdXJlIG91dHB1dCBpcyB3b3JsZCByZWFkYWJsZSAob3IgY2FjaGUgZmlsbCBmYWlscyB3aXRoIFBlcm1pc3Npb24gRGVuaWVkKQorICAgICAgcnVuOiA+CisgICAgICAgIHN1ZG8gY2htb2QgLVIgYStyIC4vbGlieWFtbC8KKyAgICAgIGlmOiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKworCisgIGxpbnV4X3B5eWFtbDoKKyAgICBuZWVkczogbGludXhfbGlieWFtbAorICAgIG5hbWU6IHB5eWFtbCAke3ttYXRyaXguYXJjaH19ICR7e21hdHJpeC5wbGF0Zm9ybX19ICR7e21hdHJpeC5zcGVjfX0KKyAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0CisgICAgc3RyYXRlZ3k6CisgICAgICBtYXRyaXg6CisgICAgICAgIGluY2x1ZGU6CisgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MSwgYXJjaDogeDg2XzY0LCBzcGVjOiBjcDM2IH0KKyMgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MSwgYXJjaDogeDg2XzY0LCBzcGVjOiBjcDM3IH0KKyMgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MSwgYXJjaDogeDg2XzY0LCBzcGVjOiBjcDM4IH0KKyMgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MSwgYXJjaDogeDg2XzY0LCBzcGVjOiBjcDM5IH0KKyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiB4ODZfNjQsIHNwZWM6IGNwMzEwIH0KKyMgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MjAxNCwgYXJjaDogYWFyY2g2NCwgc3BlYzogY3AzNiB9CisjICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IGFhcmNoNjQsIHNwZWM6IGNwMzcgfQorIyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiBhYXJjaDY0LCBzcGVjOiBjcDM4IH0KKyMgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MjAxNCwgYXJjaDogYWFyY2g2NCwgc3BlYzogY3AzOSB9CisjICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IGFhcmNoNjQsIHNwZWM6IGNwMzEwIH0KKyMgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MjAxNCwgYXJjaDogczM5MHgsIHNwZWM6IGNwMzYgfQorIyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiBzMzkweCwgc3BlYzogY3AzNyB9CisjICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IHMzOTB4LCBzcGVjOiBjcDM4IH0KKyMgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MjAxNCwgYXJjaDogczM5MHgsIHNwZWM6IGNwMzkgfQorIyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiBzMzkweCwgc3BlYzogY3AzMTAgfQorCisgICAgc3RlcHM6CisgICAgLSBuYW1lOiBDaGVja291dCBQeVlBTUwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjIKKworICAgIC0gbmFtZTogRmV0Y2ggY2FjaGVkIGxpYnlhbWwKKyAgICAgIGlkOiBjYWNoZWRfbGlieWFtbAorICAgICAgdXNlczogYWN0aW9ucy9jYWNoZUB2MgorICAgICAgd2l0aDoKKyAgICAgICAgcGF0aDogbGlieWFtbAorICAgICAgICBrZXk6IGxpYnlhbWxfJHt7bWF0cml4LnBsYXRmb3JtfX1fJHt7bWF0cml4LmFyY2h9fV8ke3tlbnYuTElCWUFNTF9SRUZ9fQorCisgICAgLSBuYW1lOiBFbnN1cmUgbGlieWFtbCBmZXRjaGVkCisgICAgICBydW46IGV4aXQgMQorICAgICAgaWY6IHN0ZXBzLmNhY2hlZF9saWJ5YW1sLm91dHB1dHMuY2FjaGUtaGl0ICE9ICd0cnVlJworCisgICAgLSBuYW1lOiBjb25maWd1cmUgZG9ja2VyIGZvcmVpZ24gYXJjaCBzdXBwb3J0CisgICAgICB1c2VzOiBkb2NrZXIvc2V0dXAtcWVtdS1hY3Rpb25AdjEKKyAgICAgIGlmOiBtYXRyaXguYXJjaCAhPSAneDg2XzY0JworCisgICAgLSBuYW1lOiBCdWlsZC9UZXN0L1BhY2thZ2UKKyAgICAgIGVudjoKKyAgICAgICAgQ0lCV19BUkNIUzogYWxsCisgICAgICAgIENJQldfQlVJTEQ6ICR7e21hdHJpeC5zcGVjfX0tbWFueWxpbnV4XyR7e21hdHJpeC5hcmNofX0KKyAgICAgICAgQ0lCV19CVUlMRF9WRVJCT1NJVFk6IDEKKyAgICAgICAgIyBjb250YWluZXJpemVkIExpbnV4IGJ1aWxkcyByZXF1aXJlIGV4cGxpY2l0IENJQldfRU5WSVJPTk1FTlQKKyAgICAgICAgQ0lCV19FTlZJUk9OTUVOVDogPgorICAgICAgICAgIENfSU5DTFVERV9QQVRIPWxpYnlhbWwvaW5jbHVkZQorICAgICAgICAgIExJQlJBUllfUEFUSD1saWJ5YW1sL3NyYy8ubGlicworICAgICAgICAgIExEX0xJQlJBUllfUEFUSD1saWJ5YW1sL3NyYy8ubGlicworICAgICAgICAgIFBZWUFNTF9GT1JDRV9DWVRIT049MQorICAgICAgICAgIFBZWUFNTF9GT1JDRV9MSUJZQU1MPTEKKyAgICAgICAgQ0lCV19URVNUX0NPTU1BTkQ6IGNkIHtwcm9qZWN0fTsgcHl0aG9uIHRlc3RzL2xpYi90ZXN0X2FsbC5weQorICAgICAgcnVuOiB8CisgICAgICAgIHNldCAtZXV4CisgICAgICAgIHB5dGhvbjMgLVYKKyAgICAgICAgcHl0aG9uMyAtbSBwaXAgaW5zdGFsbCAtVSAtLXVzZXIgY2lidWlsZHdoZWVsCisgICAgICAgIHB5dGhvbjMgLW0gY2lidWlsZHdoZWVsIC0tcGxhdGZvcm0gYXV0byAtLW91dHB1dC1kaXIgZGlzdCAuCisKKyAgICAtIG5hbWU6IFVwbG9hZCBhcnRpZmFjdHMKKyAgICAgIHVzZXM6IGFjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHYyCisgICAgICB3aXRoOgorICAgICAgICBuYW1lOiBkaXN0CisgICAgICAgIHBhdGg6IGRpc3QvKi53aGwKKyAgICAgICAgaWYtbm8tZmlsZXMtZm91bmQ6IGVycm9yCisKKyAgbWFjb3NfbGlieWFtbDoKKyAgICBuYW1lOiBsaWJ5YW1sIG1hY29zICR7e21hdHJpeC5hcmNofX0KKyAgICBzdHJhdGVneToKKyAgICAgIG1hdHJpeDoKKyAgICAgICAgaW5jbHVkZToKKyAgICAgICAgLSBhcmNoOiB4ODZfNjQKKyMgICAgICAgIC0gYXJjaDogYXJtNjQKKyMgICAgICAgICAgcnVuc19vbjogW3NlbGYtaG9zdGVkLCBtYWNPUywgYXJtNjRdCisjICAgICAgICAgIGRlcGxveW1lbnRfdGFyZ2V0OiAnMTEuMCcKKyMgICAgICAgICAgcnVuX3dyYXBwZXI6IGFyY2ggLWFybTY0IGJhc2ggLS1ub3Byb2ZpbGUgLS1ub3JjIC1lbyBwaXBlZmFpbCB7MH0KKyMgICAgICAgICAgc2Rrcm9vdDogbWFjb3N4MTEuMworICAgIGRlZmF1bHRzOgorICAgICAgcnVuOgorICAgICAgICBzaGVsbDogJHt7IG1hdHJpeC5ydW5fd3JhcHBlciB8fCAnYmFzaCAtLW5vcHJvZmlsZSAtLW5vcmMgLWVvIHBpcGVmYWlsIHswfScgfX0KKyAgICBydW5zLW9uOiAke3sgbWF0cml4LnJ1bnNfb24gfHwgJ21hY29zLTEwLjE1JyB9fQorICAgIHN0ZXBzOgorICAgIC0gbmFtZTogQ2hlY2sgY2FjaGVkIGxpYnlhbWwgc3RhdGUKKyAgICAgIGlkOiBjYWNoZWRfbGlieWFtbAorICAgICAgdXNlczogYWN0aW9ucy9jYWNoZUB2MgorICAgICAgd2l0aDoKKyAgICAgICAgcGF0aDogbGlieWFtbAorICAgICAgICBrZXk6IGxpYnlhbWxfbWFjb3NfJHt7bWF0cml4LmFyY2h9fV8ke3tlbnYuTElCWUFNTF9SRUZ9fQorCisgICAgLSBuYW1lOiBDaGVja291dCBQeVlBTUwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjIKKyAgICAgIGlmOiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKworICAgIC0gbmFtZTogQnVpbGQgbGlieWFtbAorICAgICAgZW52OgorICAgICAgICBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ6ICR7eyBtYXRyaXguZGVwbG95bWVudF90YXJnZXQgfHwgJzEwLjknIH19CisgICAgICAgIFNES1JPT1Q6ICR7eyBtYXRyaXguc2Rrcm9vdCB8fCAnbWFjb3N4JyB9fQorICAgICAgcnVuOiB8CisgICAgICAgIHNldCAtZXV4CisgICAgICAgIGJyZXcgaW5zdGFsbCBhdXRvbWFrZSBjb3JldXRpbHMgbTQKKyAgICAgICAgYmFzaCAuL3BhY2thZ2luZy9idWlsZC9saWJ5YW1sLnNoCisgICAgICAgIGVjaG8gImZpbmlzaGVkIGFydGlmYWN0IGFyY2ggaXMgJChsaXBvIC1hcmNocyBsaWJ5YW1sL3NyYy8ubGlicy9saWJ5YW1sLmEpIgorICAgICAgaWY6IHN0ZXBzLmNhY2hlZF9saWJ5YW1sLm91dHB1dHMuY2FjaGUtaGl0ICE9ICd0cnVlJworCisKKyAgbWFjb3NfcHl5YW1sOgorICAgIG5lZWRzOiBtYWNvc19saWJ5YW1sCisgICAgbmFtZTogcHl5YW1sICR7eyBtYXRyaXguc3BlYyB9fQorICAgIHJ1bnMtb246ICR7eyBtYXRyaXgucnVuc19vbiB8fCAnbWFjb3MtMTAuMTUnIH19CisgICAgZGVmYXVsdHM6CisgICAgICBydW46CisgICAgICAgIHNoZWxsOiAke3sgbWF0cml4LnJ1bl93cmFwcGVyIHx8ICdiYXNoIC0tbm9wcm9maWxlIC0tbm9yYyAtZW8gcGlwZWZhaWwgezB9JyB9fQorICAgIHN0cmF0ZWd5OgorICAgICAgbWF0cml4OgorICAgICAgICBpbmNsdWRlOgorICAgICAgICAtIHNwZWM6IGNwMzYtbWFjb3N4X3g4Nl82NAorIyAgICAgICAgLSBzcGVjOiBjcDM3LW1hY29zeF94ODZfNjQKKyMgICAgICAgIC0gc3BlYzogY3AzOC1tYWNvc3hfeDg2XzY0CisjICAgICAgICAtIHNwZWM6IGNwMzktbWFjb3N4X3g4Nl82NAorICAgICAgICAtIHNwZWM6IGNwMzEwLW1hY29zeF94ODZfNjQKKworIyAgICAgICAgIyBidWlsZCBmb3IgYXJtNjQgdW5kZXIgYSBoYWNrZWQgbWFjT1MgMTIgc2VsZi1ob3N0ZWQgeDg2XzY0LW9uLWFybTY0IHJ1bm5lciB1bnRpbCBhcm02NCBpcyBmdWxseSBzdXBwb3J0ZWQKKyMgICAgICAgICMgRklYTUU6ID8gY3AzOC1tYWNvc3hfYXJtNjQgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBhbmQgZmFpbHMgc29tZSB0ZXN0X3pkaXN0IHRlc3RzIHVuZGVyIGNpYncgMi4xLjIsIHNraXAgaXQgKHNvIEFwcGxlJ3MgWENvZGUgcHl0aG9uMyB3b24ndCBoYXZlIGEgd2hlZWwpCisjICAgICAgICAtIHNwZWM6IGNwMzktbWFjb3N4X2FybTY0CisjICAgICAgICAgIGRlcGxveW1lbnRfdGFyZ2V0OiAnMTEuMCcKKyMgICAgICAgICAgcnVuc19vbjogW3NlbGYtaG9zdGVkLCBtYWNPUywgYXJtNjRdCisjICAgICAgICAgIGFyY2g6IGFybTY0CisjICAgICAgICAgIHJ1bl93cmFwcGVyOiBhcmNoIC1hcm02NCBiYXNoIC0tbm9wcm9maWxlIC0tbm9yYyAtZW8gcGlwZWZhaWwgezB9CisjICAgICAgICAgIHNka3Jvb3Q6IG1hY29zeDExLjMKKyMKKyMgICAgICAgIC0gc3BlYzogY3AzMTAtbWFjb3N4X2FybTY0CisjICAgICAgICAgIGRlcGxveW1lbnRfdGFyZ2V0OiAnMTEuMCcKKyMgICAgICAgICAgcnVuc19vbjogW3NlbGYtaG9zdGVkLCBtYWNPUywgYXJtNjRdCisjICAgICAgICAgIGFyY2g6IGFybTY0CisjICAgICAgICAgIHJ1bl93cmFwcGVyOiBhcmNoIC1hcm02NCBiYXNoIC0tbm9wcm9maWxlIC0tbm9yYyAtZW8gcGlwZWZhaWwgezB9CisjICAgICAgICAgIHNka3Jvb3Q6IG1hY29zeDExLjMKKworICAgIHN0ZXBzOgorICAgIC0gbmFtZTogQ2hlY2tvdXQgUHlZQU1MCisgICAgICB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYyCisKKyAgICAtIG5hbWU6IEdldCBjYWNoZWQgbGlieWFtbCBzdGF0ZQorICAgICAgaWQ6IGNhY2hlZF9saWJ5YW1sCisgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHYyCisgICAgICB3aXRoOgorICAgICAgICBwYXRoOiBsaWJ5YW1sCisgICAgICAgIGtleTogbGlieWFtbF9tYWNvc18ke3sgbWF0cml4LmFyY2ggfHwgJ3g4Nl82NCcgfX1fJHt7ZW52LkxJQllBTUxfUkVGfX0KKworICAgIC0gbmFtZTogRW5zdXJlIGxpYnlhbWwgZmV0Y2hlZAorICAgICAgcnVuOiBleGl0IDEKKyAgICAgIGlmOiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKworICAgIC0gbmFtZTogQnVpbGQvVGVzdC9QYWNrYWdlCisgICAgICBlbnY6CisgICAgICAgIENfSU5DTFVERV9QQVRIOiBsaWJ5YW1sL2luY2x1ZGUKKyAgICAgICAgQ0lCV19CVUlMRDogJHt7bWF0cml4LnNwZWN9fQorICAgICAgICBDSUJXX0JVSUxEX1ZFUkJPU0lUWTogMQorICAgICAgICBDSUJXX1RFU1RfQ09NTUFORDogY2Qge3Byb2plY3R9OyBweXRob24gdGVzdHMvbGliL3Rlc3RfYWxsLnB5CisgICAgICAgIExJQlJBUllfUEFUSDogbGlieWFtbC9zcmMvLmxpYnMKKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOiAke3sgbWF0cml4LmRlcGxveW1lbnRfdGFyZ2V0IHx8ICcxMC45JyB9fQorICAgICAgICBTREtST09UOiAke3sgbWF0cml4LnNka3Jvb3QgfHwgJ21hY29zeCcgfX0KKyAgICAgIHJ1bjogfAorICAgICAgICBweXRob24zIC1WCisgICAgICAgIHB5dGhvbjMgLW0gcGlwIGluc3RhbGwgLVUgLS11c2VyIGNpYnVpbGR3aGVlbAorICAgICAgICBweXRob24zIC1tIGNpYnVpbGR3aGVlbCAtLXBsYXRmb3JtIGF1dG8gLS1vdXRwdXQtZGlyIGRpc3QgLgorCisgICAgLSBuYW1lOiBVcGxvYWQgYXJ0aWZhY3RzCisgICAgICB1c2VzOiBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2MgorICAgICAgd2l0aDoKKyAgICAgICAgbmFtZTogZGlzdAorICAgICAgICBwYXRoOiBkaXN0Lyoud2hsCisgICAgICAgIGlmLW5vLWZpbGVzLWZvdW5kOiBlcnJvcgorCisgIHdpbmRvd3NfbGlieWFtbDoKKyAgICBuYW1lOiBsaWJ5YW1sICR7e21hdHJpeC5wbGF0Zm9ybX19ICR7e21hdHJpeC5hcmNofX0KKyAgICBydW5zLW9uOiAke3ttYXRyaXgucGxhdGZvcm19fQorICAgIHN0cmF0ZWd5OgorICAgICAgbWF0cml4OgorICAgICAgICBpbmNsdWRlOgorICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyAgICAgICAgICBhcmNoOiB4NjQKKyAgICAgICAgLSBwbGF0Zm9ybTogd2luZG93cy0yMDE2CisgICAgICAgICAgYXJjaDogd2luMzIKKyAgICBzdGVwczoKKyAgICAtIG5hbWU6IEdldCBjYWNoZWQgbGlieWFtbCBzdGF0ZQorICAgICAgaWQ6IGNhY2hlZF9saWJ5YW1sCisgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHYyCisgICAgICB3aXRoOgorICAgICAgICBwYXRoOiBsaWJ5YW1sCisgICAgICAgIGtleTogbGlieWFtbF8ke3ttYXRyaXgucGxhdGZvcm19fV8ke3ttYXRyaXguYXJjaH19XyR7e2Vudi5MSUJZQU1MX1JFRn19CisKKyAgICAtIG5hbWU6IEJ1aWxkIGxpYnlhbWwKKyAgICAgIHNoZWxsOiBiYXNoCisgICAgICBpZjogc3RlcHMuY2FjaGVkX2xpYnlhbWwub3V0cHV0cy5jYWNoZS1oaXQgIT0gJ3RydWUnCisgICAgICBydW46IHwKKyAgICAgICAgIyBnaXQgc3Bld3MgYWxsIG92ZXIgc3RkZXJyIHVubGVzcyB3ZSB0ZWxsIGl0IG5vdCB0bworICAgICAgICBleHBvcnQgR0lUX1JFRElSRUNUX1NUREVSUj0iMj4mMSIKKworICAgICAgICBpZiBbWyAhIC1kIC4vbGlieWFtbCBdXTsgdGhlbgorICAgICAgICAgIGdpdCBjbG9uZSAtYiAke3sgZW52LkxJQllBTUxfUkVGIH19ICR7eyBlbnYuTElCWUFNTF9SRVBPIH19IDI+JjEKKyAgICAgICAgZmkKKworICAgICAgICBwdXNoZCBsaWJ5YW1sCisgICAgICAgIGdpdCBjbGVhbiAtZmR4CisgICAgICAgIHBvcGQKKworICAgICAgICBta2RpciBsaWJ5YW1sL2J1aWxkCisKKyAgICAgICAgcHVzaGQgbGlieWFtbC9idWlsZAorICAgICAgICBjbWFrZS5leGUgLUcgIlZpc3VhbCBTdHVkaW8gMTUgMjAxNyIgLUEgJHt7IG1hdHJpeC5hcmNoIH19IC1EWUFNTF9TVEFUSUNfTElCX05BTUU9eWFtbCAuLgorICAgICAgICBjbWFrZS5leGUgLS1idWlsZCAuIC0tY29uZmlnIFJlbGVhc2UKKyAgICAgICAgcG9wZAorCisKKyAgd2luZG93c19weXlhbWw6CisgICAgbmVlZHM6IHdpbmRvd3NfbGlieWFtbAorICAgIG5hbWU6IHB5eWFtbCAke3sgbWF0cml4LnBsYXRmb3JtIH19ICR7e21hdHJpeC5weXRob25fYXJjaH19ICR7e21hdHJpeC5zcGVjfX0KKyAgICBydW5zLW9uOiAke3ttYXRyaXgucGxhdGZvcm19fQorICAgIHN0cmF0ZWd5OgorICAgICAgbWF0cml4OgorICAgICAgICBpbmNsdWRlOgorICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyAgICAgICAgICBidWlsZF9hcmNoOiB4NjQKKyAgICAgICAgICBweXRob25fYXJjaDogeDY0CisgICAgICAgICAgc3BlYzogMy42CisjICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyMgICAgICAgICAgYnVpbGRfYXJjaDogeDY0CisjICAgICAgICAgIHB5dGhvbl9hcmNoOiB4NjQKKyMgICAgICAgICAgc3BlYzogMy43CisjICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyMgICAgICAgICAgYnVpbGRfYXJjaDogeDY0CisjICAgICAgICAgIHB5dGhvbl9hcmNoOiB4NjQKKyMgICAgICAgICAgc3BlYzogMy44CisjICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyMgICAgICAgICAgYnVpbGRfYXJjaDogeDY0CisjICAgICAgICAgIHB5dGhvbl9hcmNoOiB4NjQKKyMgICAgICAgICAgc3BlYzogMy45CisgICAgICAgIC0gcGxhdGZvcm06IHdpbmRvd3MtMjAxNgorICAgICAgICAgIGJ1aWxkX2FyY2g6IHg2NAorICAgICAgICAgIHB5dGhvbl9hcmNoOiB4NjQKKyAgICAgICAgICBzcGVjOiAnMy4xMCcKKyAgICAgICAgLSBwbGF0Zm9ybTogd2luZG93cy0yMDE2CisgICAgICAgICAgYnVpbGRfYXJjaDogd2luMzIKKyAgICAgICAgICBweXRob25fYXJjaDogeDg2CisgICAgICAgICAgc3BlYzogMy42CisjICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyMgICAgICAgICAgYnVpbGRfYXJjaDogd2luMzIKKyMgICAgICAgICAgcHl0aG9uX2FyY2g6IHg4NgorIyAgICAgICAgICBzcGVjOiAzLjcKKyMgICAgICAgIC0gcGxhdGZvcm06IHdpbmRvd3MtMjAxNgorIyAgICAgICAgICBidWlsZF9hcmNoOiB3aW4zMgorIyAgICAgICAgICBweXRob25fYXJjaDogeDg2CisjICAgICAgICAgIHNwZWM6IDMuOAorIyAgICAgICAgLSBwbGF0Zm9ybTogd2luZG93cy0yMDE2CisjICAgICAgICAgIGJ1aWxkX2FyY2g6IHdpbjMyCisjICAgICAgICAgIHB5dGhvbl9hcmNoOiB4ODYKKyMgICAgICAgICAgc3BlYzogMy45CisgICAgICAgIC0gcGxhdGZvcm06IHdpbmRvd3MtMjAxNgorICAgICAgICAgIGJ1aWxkX2FyY2g6IHdpbjMyCisgICAgICAgICAgcHl0aG9uX2FyY2g6IHg4NgorICAgICAgICAgIHNwZWM6ICczLjEwJworICAgIHN0ZXBzOgorICAgICMgYXV0b2NybGYgc2NyZXdzIHVwIHRlc3RzIHVuZGVyIFdpbmRvd3MKKyAgICAtIG5hbWU6IFNldCBnaXQgdG8gdXNlIExGCisgICAgICBydW46IHwKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLmF1dG9jcmxmIGZhbHNlCisgICAgICAgIGdpdCBjb25maWcgLS1nbG9iYWwgY29yZS5lb2wgbGYKKworICAgIC0gbmFtZTogQ2hlY2tvdXQgcHl5YW1sCisgICAgICB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYyCisKKyAgICAtIG5hbWU6IEdldCBjYWNoZWQgbGlieWFtbCBzdGF0ZQorICAgICAgaWQ6IGNhY2hlZF9saWJ5YW1sCisgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHYyCisgICAgICB3aXRoOgorICAgICAgICBwYXRoOiBsaWJ5YW1sCisgICAgICAgIGtleTogbGlieWFtbF8ke3ttYXRyaXgucGxhdGZvcm19fV8ke3ttYXRyaXguYnVpbGRfYXJjaH19XyR7e2Vudi5MSUJZQU1MX1JFRn19CisKKyAgICAtIG5hbWU6IEVuc3VyZSBsaWJ5YW1sIGZldGNoZWQKKyAgICAgIHJ1bjogZXhpdCAxCisgICAgICBpZjogc3RlcHMuY2FjaGVkX2xpYnlhbWwub3V0cHV0cy5jYWNoZS1oaXQgIT0gJ3RydWUnCisKKyAgICAtIG5hbWU6IEluc3RhbGwgcHl0aG9uICR7eyBtYXRyaXguc3BlYyB9fQorICAgICAgdXNlczogYWN0aW9ucy9zZXR1cC1weXRob25AdjIKKyAgICAgIHdpdGg6CisgICAgICAgIGFyY2hpdGVjdHVyZTogJHt7IG1hdHJpeC5weXRob25fYXJjaCB9fQorICAgICAgICBweXRob24tdmVyc2lvbjogJHt7IG1hdHJpeC5zcGVjIH19CisKKyAgICAtIG5hbWU6IEJ1aWxkL1Rlc3QvUGFja2FnZQorICAgICAgZW52OgorICAgICAgICBQWVlBTUxfRk9SQ0VfQ1lUSE9OOiAxCisgICAgICAgIFBZWUFNTF9GT1JDRV9MSUJZQU1MOiAxCisgICAgICBzaGVsbDogYmFzaAorICAgICAgcnVuOiB8CisgICAgICAgIHNldCAtZXV4CisgICAgICAgIHB5dGhvbiAtVgorICAgICAgICBweXRob24gLW0gcGlwIGluc3RhbGwgQ3l0aG9uIHdoZWVsCisKKyAgICAgICAgcHl0aG9uIHNldHVwLnB5IFwKKyAgICAgICAgLS13aXRoLWxpYnlhbWwgYnVpbGRfZXh0IFwKKyAgICAgICAgLUkgbGlieWFtbC9pbmNsdWRlIFwKKyAgICAgICAgLUwgbGlieWFtbC9idWlsZC9SZWxlYXNlIFwKKyAgICAgICAgLUQgWUFNTF9ERUNMQVJFX1NUQVRJQyBcCisgICAgICAgIGJ1aWxkIGJkaXN0X3doZWVsCisKKyAgICAgICAgIyBydW4gdGVzdHMgb24gYnVpbHQgd2hlZWwKKyAgICAgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsIGRpc3QvKi53aGwKKyAgICAgICAgcHl0aG9uIHRlc3RzL2xpYi90ZXN0X2FsbC5weQorCisgICAgLSBuYW1lOiBVcGxvYWQgYXJ0aWZhY3RzCisgICAgICB1c2VzOiBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2MgorICAgICAgd2l0aDoKKyAgICAgICAgbmFtZTogZGlzdAorICAgICAgICBwYXRoOiBkaXN0Lyoud2hsCisgICAgICAgIGlmLW5vLWZpbGVzLWZvdW5kOiBlcnJvcgorLi4uCmRpZmYgLS1naXQgYS8uZ2l0aHViL3dvcmtmbG93cy9tYW51YWxfYXJ0aWZhY3RfYnVpbGQueWFtbCBiLy5naXRodWIvd29ya2Zsb3dzL21hbnVhbF9hcnRpZmFjdF9idWlsZC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTI3NmUKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aHViL3dvcmtmbG93cy9tYW51YWxfYXJ0aWZhY3RfYnVpbGQueWFtbApAQCAtMCwwICsxLDQzMCBAQAorLS0tCisjIFRoaXMgaXMgdGhlIGFjdHVhbCBhcnRpZmFjdCBidWlsZC9yZWxlYXNlIHdvcmtmbG93LiBUaGlzIHdvcmtmbG93IGV4aXN0cyB0ZW1wb3JhcmlseQorIyBiZWNhdXNlIEdIQSBkb2Vzbid0IHN1cHBvcnQgYSBkeW5hbWljL2NvbmRpdGlvbmFsIG1hdHJpeC4gRW5zdXJlIGNoYW5nZXMgYXJlIHN5bmNlZCB3aXRoIGNpLnlhbWwuCituYW1lOiBNYW51YWwgQXJ0aWZhY3QgQnVpbGQKKworb246CisjICBwdXNoOgorIyAgcHVsbF9yZXF1ZXN0OgorIyAgICB0eXBlczogW29wZW5lZCwgc3luY2hyb25pemUsIGVkaXRlZCwgcmVvcGVuZWRdCisgIHdvcmtmbG93X2Rpc3BhdGNoOgorCitlbnY6CisgIExJQllBTUxfUkVQTzogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvbGlieWFtbAorICBMSUJZQU1MX1JFRjogMC4yLjUKKworam9iczoKKyAgcHl0aG9uX3NkaXN0OgorICAgIG5hbWU6IHB5eWFtbCBzZGlzdAorICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3QKKyAgICBzdGVwczoKKyAgICAtIG5hbWU6IENoZWNrb3V0IFB5WUFNTAorICAgICAgdXNlczogYWN0aW9ucy9jaGVja291dEB2MgorCisgICAgLSBuYW1lOiBJbnN0YWxsIGEgcHl0aG9uCisgICAgICB1c2VzOiBhY3Rpb25zL3NldHVwLXB5dGhvbkB2MgorICAgICAgd2l0aDoKKyAgICAgICAgcHl0aG9uLXZlcnNpb246IDMueAorCisgICAgLSBuYW1lOiBCdWlsZCBzZGlzdAorICAgICAgZW52OgorICAgICAgICBQWVlBTUxfRk9SQ0VfQ1lUSE9OOiAxCisgICAgICAgIFBZWUFNTF9GT1JDRV9MSUJZQU1MOiAwCisgICAgICBydW46IHwKKyAgICAgICAgcHl0aG9uIC1WCisgICAgICAgIHB5dGhvbiAtbSBwaXAgaW5zdGFsbCBidWlsZAorCisgICAgICAgIHB5dGhvbiAtbSBidWlsZCAuCisKKyAgICAgICAgIyBFbnN1cmUgZXhhY3RseSBvbmUgYXJ0aWZhY3Qgd2FzIHByb2R1Y2VkLgorICAgICAgICBbWyAkKHNob3B0IC1zIG51bGxnbG9iOyBscyBkaXN0LyoudGFyLmd6IHwgd2MgLXcpID09IDEgXV0gfHwgeworICAgICAgICAgIGVjaG8gIlVuZXhwZWN0ZWQgY29udGVudCBpbiBkaXN0IGRpcjogJyQobHMgZGlzdC8qLnRhci5neiknLiIKKyAgICAgICAgICBleGl0IDEKKyAgICAgICAgfQorCisgICAgLSBuYW1lOiBUZXN0IHNkaXN0CisgICAgICBydW46IHwKKyAgICAgICAgIyBJbnN0YWxsIHNvbWUgbGlieWFtbCBoZWFkZXJzLgorICAgICAgICAjIFRPRE8gU2hvdWxkIHdlIHNtb2tlIHRlc3QgdGhlIHNkaXN0IGFnYWluc3QgdGhlIGxpYnlhbWwgd2UgYnVpbHQ/CisgICAgICAgIHN1ZG8gYXB0IHVwZGF0ZQorICAgICAgICBzdWRvIGFwdCBpbnN0YWxsIGxpYnlhbWwtZGV2IC15CisKKyAgICAgICAgIyBFbnN1cmUgQ3l0aG9uIGlzIG5vdCBwcmVzZW50IHNvIHdlIHVzZSBvbmx5IHdoYXQncyBpbiB0aGUgc2Rpc3QuCisgICAgICAgIHB5dGhvbiAtbSBwaXAgdW5pbnN0YWxsIEN5dGhvbiAteSB8fCB0cnVlCisKKyAgICAgICAgIyBQYXNzIG5vIGV4dHJhIGFyZ3MuCisgICAgICAgICMgV2Ugc2hvdWxkIGF1dG8taW5zdGFsbCB3aXRoIGxpYnlhbWwgc2luY2UgaXQncyBwcmVzZW50LgorICAgICAgICBweXRob24gLW0gcGlwIGluc3RhbGwgZGlzdC8qLnRhci5neiAtdgorCisgICAgICAgIHB5dGhvbiBwYWNrYWdpbmcvYnVpbGQvc21va2V0ZXN0LnB5CisKKyAgICAtIG5hbWU6IFVwbG9hZCBzZGlzdCBhcnRpZmFjdAorICAgICAgdXNlczogYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RAdjIKKyAgICAgIHdpdGg6CisgICAgICAgIG5hbWU6IGRpc3QKKyAgICAgICAgcGF0aDogZGlzdC8qLnRhci5negorCisKKyAgbGludXhfbGlieWFtbDoKKyAgICBuYW1lOiBsaWJ5YW1sICR7e21hdHJpeC5jZmcuYXJjaH19ICR7e21hdHJpeC5jZmcucGxhdGZvcm19fQorICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3QKKyAgICBzdHJhdGVneToKKyAgICAgIG1hdHJpeDoKKyAgICAgICAgY2ZnOgorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDEsIGFyY2g6IHg4Nl82NCB9CisgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MjAxNCwgYXJjaDogeDg2XzY0IH0KKyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiBhYXJjaDY0IH0KKyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiBzMzkweCB9CisgICAgZW52OgorICAgICAgRE9DS0VSX0lNQUdFOiBxdWF5LmlvL3B5cGEvJHt7bWF0cml4LmNmZy5wbGF0Zm9ybX19XyR7e21hdHJpeC5jZmcuYXJjaH19CisgICAgc3RlcHM6CisgICAgLSBuYW1lOiBDaGVjayBjYWNoZWQgbGlieWFtbCBzdGF0ZQorICAgICAgaWQ6IGNhY2hlZF9saWJ5YW1sCisgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHYyCisgICAgICB3aXRoOgorICAgICAgICBwYXRoOiBsaWJ5YW1sCisgICAgICAgIGtleTogbGlieWFtbF8ke3ttYXRyaXguY2ZnLnBsYXRmb3JtfX1fJHt7bWF0cml4LmNmZy5hcmNofX1fJHt7ZW52LkxJQllBTUxfUkVGfX0KKworICAgIC0gbmFtZTogY29uZmlndXJlIGRvY2tlciBmb3JlaWduIGFyY2ggc3VwcG9ydAorICAgICAgdXNlczogZG9ja2VyL3NldHVwLXFlbXUtYWN0aW9uQHYxCisgICAgICBpZjogbWF0cml4LmNmZy5hcmNoICE9ICd4ODZfNjQnICYmIHN0ZXBzLmNhY2hlZF9saWJ5YW1sLm91dHB1dHMuY2FjaGUtaGl0ICE9ICd0cnVlJworCisgICAgLSBuYW1lOiBDaGVja291dCBweXlhbWwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjIKKyAgICAgIGlmOiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKworICAgIC0gbmFtZTogQnVpbGQgbGlieWFtbAorICAgICAgcnVuOiA+CisgICAgICAgIGRvY2tlciBydW4gLS1ybQorICAgICAgICAtLXZvbHVtZSAiJChwd2QpOi9pbyIKKyAgICAgICAgLS1lbnYgTElCWUFNTF9SRUYKKyAgICAgICAgLS1lbnYgTElCWUFNTF9SRVBPCisgICAgICAgIC0td29ya2RpciAvaW8KKyAgICAgICAgIiRET0NLRVJfSU1BR0UiCisgICAgICAgIC9pby9wYWNrYWdpbmcvYnVpbGQvbGlieWFtbC5zaAorICAgICAgaWY6IHN0ZXBzLmNhY2hlZF9saWJ5YW1sLm91dHB1dHMuY2FjaGUtaGl0ICE9ICd0cnVlJworCisgICAgLSBuYW1lOiBlbnN1cmUgb3V0cHV0IGlzIHdvcmxkIHJlYWRhYmxlIChvciBjYWNoZSBmaWxsIGZhaWxzIHdpdGggUGVybWlzc2lvbiBEZW5pZWQpCisgICAgICBydW46ID4KKyAgICAgICAgc3VkbyBjaG1vZCAtUiBhK3IgLi9saWJ5YW1sLworICAgICAgaWY6IHN0ZXBzLmNhY2hlZF9saWJ5YW1sLm91dHB1dHMuY2FjaGUtaGl0ICE9ICd0cnVlJworCisKKyAgbGludXhfcHl5YW1sOgorICAgIG5lZWRzOiBsaW51eF9saWJ5YW1sCisgICAgbmFtZTogcHl5YW1sICR7e21hdHJpeC5hcmNofX0gJHt7bWF0cml4LnBsYXRmb3JtfX0gJHt7bWF0cml4LnNwZWN9fQorICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3QKKyAgICBzdHJhdGVneToKKyAgICAgIG1hdHJpeDoKKyAgICAgICAgaW5jbHVkZToKKyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgxLCBhcmNoOiB4ODZfNjQsIHNwZWM6IGNwMzYgfQorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDEsIGFyY2g6IHg4Nl82NCwgc3BlYzogY3AzNyB9CisgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MSwgYXJjaDogeDg2XzY0LCBzcGVjOiBjcDM4IH0KKyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgxLCBhcmNoOiB4ODZfNjQsIHNwZWM6IGNwMzkgfQorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IHg4Nl82NCwgc3BlYzogY3AzMTAgfQorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IGFhcmNoNjQsIHNwZWM6IGNwMzYgfQorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IGFhcmNoNjQsIHNwZWM6IGNwMzcgfQorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IGFhcmNoNjQsIHNwZWM6IGNwMzggfQorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IGFhcmNoNjQsIHNwZWM6IGNwMzkgfQorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IGFhcmNoNjQsIHNwZWM6IGNwMzEwIH0KKyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiBzMzkweCwgc3BlYzogY3AzNiB9CisgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MjAxNCwgYXJjaDogczM5MHgsIHNwZWM6IGNwMzcgfQorICAgICAgICAtIHsgcGxhdGZvcm06IG1hbnlsaW51eDIwMTQsIGFyY2g6IHMzOTB4LCBzcGVjOiBjcDM4IH0KKyAgICAgICAgLSB7IHBsYXRmb3JtOiBtYW55bGludXgyMDE0LCBhcmNoOiBzMzkweCwgc3BlYzogY3AzOSB9CisgICAgICAgIC0geyBwbGF0Zm9ybTogbWFueWxpbnV4MjAxNCwgYXJjaDogczM5MHgsIHNwZWM6IGNwMzEwIH0KKworICAgIHN0ZXBzOgorICAgIC0gbmFtZTogQ2hlY2tvdXQgUHlZQU1MCisgICAgICB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYyCisKKyAgICAtIG5hbWU6IEZldGNoIGNhY2hlZCBsaWJ5YW1sCisgICAgICBpZDogY2FjaGVkX2xpYnlhbWwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2FjaGVAdjIKKyAgICAgIHdpdGg6CisgICAgICAgIHBhdGg6IGxpYnlhbWwKKyAgICAgICAga2V5OiBsaWJ5YW1sXyR7e21hdHJpeC5wbGF0Zm9ybX19XyR7e21hdHJpeC5hcmNofX1fJHt7ZW52LkxJQllBTUxfUkVGfX0KKworICAgIC0gbmFtZTogRW5zdXJlIGxpYnlhbWwgZmV0Y2hlZAorICAgICAgcnVuOiBleGl0IDEKKyAgICAgIGlmOiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKworICAgIC0gbmFtZTogY29uZmlndXJlIGRvY2tlciBmb3JlaWduIGFyY2ggc3VwcG9ydAorICAgICAgdXNlczogZG9ja2VyL3NldHVwLXFlbXUtYWN0aW9uQHYxCisgICAgICBpZjogbWF0cml4LmFyY2ggIT0gJ3g4Nl82NCcKKworICAgIC0gbmFtZTogQnVpbGQvVGVzdC9QYWNrYWdlCisgICAgICBlbnY6CisgICAgICAgIENJQldfQVJDSFM6IGFsbAorICAgICAgICBDSUJXX0JVSUxEOiAke3ttYXRyaXguc3BlY319LW1hbnlsaW51eF8ke3ttYXRyaXguYXJjaH19CisgICAgICAgIENJQldfQlVJTERfVkVSQk9TSVRZOiAxCisgICAgICAgICMgY29udGFpbmVyaXplZCBMaW51eCBidWlsZHMgcmVxdWlyZSBleHBsaWNpdCBDSUJXX0VOVklST05NRU5UCisgICAgICAgIENJQldfRU5WSVJPTk1FTlQ6ID4KKyAgICAgICAgICBDX0lOQ0xVREVfUEFUSD1saWJ5YW1sL2luY2x1ZGUKKyAgICAgICAgICBMSUJSQVJZX1BBVEg9bGlieWFtbC9zcmMvLmxpYnMKKyAgICAgICAgICBMRF9MSUJSQVJZX1BBVEg9bGlieWFtbC9zcmMvLmxpYnMKKyAgICAgICAgICBQWVlBTUxfRk9SQ0VfQ1lUSE9OPTEKKyAgICAgICAgICBQWVlBTUxfRk9SQ0VfTElCWUFNTD0xCisgICAgICAgIENJQldfVEVTVF9DT01NQU5EOiBjZCB7cHJvamVjdH07IHB5dGhvbiB0ZXN0cy9saWIvdGVzdF9hbGwucHkKKyAgICAgIHJ1bjogfAorICAgICAgICBzZXQgLWV1eAorICAgICAgICBweXRob24zIC1WCisgICAgICAgIHB5dGhvbjMgLW0gcGlwIGluc3RhbGwgLVUgLS11c2VyIGNpYnVpbGR3aGVlbAorICAgICAgICBweXRob24zIC1tIGNpYnVpbGR3aGVlbCAtLXBsYXRmb3JtIGF1dG8gLS1vdXRwdXQtZGlyIGRpc3QgLgorCisgICAgLSBuYW1lOiBVcGxvYWQgYXJ0aWZhY3RzCisgICAgICB1c2VzOiBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2MgorICAgICAgd2l0aDoKKyAgICAgICAgbmFtZTogZGlzdAorICAgICAgICBwYXRoOiBkaXN0Lyoud2hsCisgICAgICAgIGlmLW5vLWZpbGVzLWZvdW5kOiBlcnJvcgorCisgIG1hY29zX2xpYnlhbWw6CisgICAgbmFtZTogbGlieWFtbCBtYWNvcyAke3ttYXRyaXguYXJjaH19CisgICAgc3RyYXRlZ3k6CisgICAgICBtYXRyaXg6CisgICAgICAgIGluY2x1ZGU6CisgICAgICAgIC0gYXJjaDogeDg2XzY0CisgICAgICAgIC0gYXJjaDogYXJtNjQKKyAgICAgICAgICBydW5zX29uOiBbc2VsZi1ob3N0ZWQsIG1hY09TLCBhcm02NF0KKyAgICAgICAgICBkZXBsb3ltZW50X3RhcmdldDogJzExLjAnCisgICAgICAgICAgcnVuX3dyYXBwZXI6IGFyY2ggLWFybTY0IGJhc2ggLS1ub3Byb2ZpbGUgLS1ub3JjIC1lbyBwaXBlZmFpbCB7MH0KKyAgICAgICAgICBzZGtyb290OiBtYWNvc3gxMS4zCisgICAgZGVmYXVsdHM6CisgICAgICBydW46CisgICAgICAgIHNoZWxsOiAke3sgbWF0cml4LnJ1bl93cmFwcGVyIHx8ICdiYXNoIC0tbm9wcm9maWxlIC0tbm9yYyAtZW8gcGlwZWZhaWwgezB9JyB9fQorICAgIHJ1bnMtb246ICR7eyBtYXRyaXgucnVuc19vbiB8fCAnbWFjb3MtMTAuMTUnIH19CisgICAgc3RlcHM6CisgICAgLSBuYW1lOiBDaGVjayBjYWNoZWQgbGlieWFtbCBzdGF0ZQorICAgICAgaWQ6IGNhY2hlZF9saWJ5YW1sCisgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHYyCisgICAgICB3aXRoOgorICAgICAgICBwYXRoOiBsaWJ5YW1sCisgICAgICAgIGtleTogbGlieWFtbF9tYWNvc18ke3ttYXRyaXguYXJjaH19XyR7e2Vudi5MSUJZQU1MX1JFRn19CisKKyAgICAtIG5hbWU6IENoZWNrb3V0IFB5WUFNTAorICAgICAgdXNlczogYWN0aW9ucy9jaGVja291dEB2MgorICAgICAgaWY6IHN0ZXBzLmNhY2hlZF9saWJ5YW1sLm91dHB1dHMuY2FjaGUtaGl0ICE9ICd0cnVlJworCisgICAgLSBuYW1lOiBCdWlsZCBsaWJ5YW1sCisgICAgICBlbnY6CisgICAgICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDogJHt7IG1hdHJpeC5kZXBsb3ltZW50X3RhcmdldCB8fCAnMTAuOScgfX0KKyAgICAgICAgU0RLUk9PVDogJHt7IG1hdHJpeC5zZGtyb290IHx8ICdtYWNvc3gnIH19CisgICAgICBydW46IHwKKyAgICAgICAgc2V0IC1ldXgKKyAgICAgICAgYnJldyBpbnN0YWxsIGF1dG9tYWtlIGNvcmV1dGlscyBtNAorICAgICAgICBiYXNoIC4vcGFja2FnaW5nL2J1aWxkL2xpYnlhbWwuc2gKKyAgICAgICAgZWNobyAiZmluaXNoZWQgYXJ0aWZhY3QgYXJjaCBpcyAkKGxpcG8gLWFyY2hzIGxpYnlhbWwvc3JjLy5saWJzL2xpYnlhbWwuYSkiCisgICAgICBpZjogc3RlcHMuY2FjaGVkX2xpYnlhbWwub3V0cHV0cy5jYWNoZS1oaXQgIT0gJ3RydWUnCisKKworICBtYWNvc19weXlhbWw6CisgICAgbmVlZHM6IG1hY29zX2xpYnlhbWwKKyAgICBuYW1lOiBweXlhbWwgJHt7IG1hdHJpeC5zcGVjIH19CisgICAgcnVucy1vbjogJHt7IG1hdHJpeC5ydW5zX29uIHx8ICdtYWNvcy0xMC4xNScgfX0KKyAgICBkZWZhdWx0czoKKyAgICAgIHJ1bjoKKyAgICAgICAgc2hlbGw6ICR7eyBtYXRyaXgucnVuX3dyYXBwZXIgfHwgJ2Jhc2ggLS1ub3Byb2ZpbGUgLS1ub3JjIC1lbyBwaXBlZmFpbCB7MH0nIH19CisgICAgc3RyYXRlZ3k6CisgICAgICBtYXRyaXg6CisgICAgICAgIGluY2x1ZGU6CisgICAgICAgIC0gc3BlYzogY3AzNi1tYWNvc3hfeDg2XzY0CisgICAgICAgIC0gc3BlYzogY3AzNy1tYWNvc3hfeDg2XzY0CisgICAgICAgIC0gc3BlYzogY3AzOC1tYWNvc3hfeDg2XzY0CisgICAgICAgIC0gc3BlYzogY3AzOS1tYWNvc3hfeDg2XzY0CisgICAgICAgIC0gc3BlYzogY3AzMTAtbWFjb3N4X3g4Nl82NAorCisgICAgICAgICMgYnVpbGQgZm9yIGFybTY0IHVuZGVyIGEgaGFja2VkIG1hY09TIDEyIHNlbGYtaG9zdGVkIHg4Nl82NC1vbi1hcm02NCBydW5uZXIgdW50aWwgYXJtNjQgaXMgZnVsbHkgc3VwcG9ydGVkCisgICAgICAgICMgRklYTUU6ID8gY3AzOC1tYWNvc3hfYXJtNjQgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBhbmQgZmFpbHMgc29tZSB0ZXN0X3pkaXN0IHRlc3RzIHVuZGVyIGNpYncgMi4xLjIsIHNraXAgaXQgKHNvIEFwcGxlJ3MgWENvZGUgcHl0aG9uMyB3b24ndCBoYXZlIGEgd2hlZWwpCisgICAgICAgIC0gc3BlYzogY3AzOS1tYWNvc3hfYXJtNjQKKyAgICAgICAgICBkZXBsb3ltZW50X3RhcmdldDogJzExLjAnCisgICAgICAgICAgcnVuc19vbjogW3NlbGYtaG9zdGVkLCBtYWNPUywgYXJtNjRdCisgICAgICAgICAgYXJjaDogYXJtNjQKKyAgICAgICAgICBydW5fd3JhcHBlcjogYXJjaCAtYXJtNjQgYmFzaCAtLW5vcHJvZmlsZSAtLW5vcmMgLWVvIHBpcGVmYWlsIHswfQorICAgICAgICAgIHNka3Jvb3Q6IG1hY29zeDExLjMKKworICAgICAgICAtIHNwZWM6IGNwMzEwLW1hY29zeF9hcm02NAorICAgICAgICAgIGRlcGxveW1lbnRfdGFyZ2V0OiAnMTEuMCcKKyAgICAgICAgICBydW5zX29uOiBbc2VsZi1ob3N0ZWQsIG1hY09TLCBhcm02NF0KKyAgICAgICAgICBhcmNoOiBhcm02NAorICAgICAgICAgIHJ1bl93cmFwcGVyOiBhcmNoIC1hcm02NCBiYXNoIC0tbm9wcm9maWxlIC0tbm9yYyAtZW8gcGlwZWZhaWwgezB9CisgICAgICAgICAgc2Rrcm9vdDogbWFjb3N4MTEuMworCisgICAgc3RlcHM6CisgICAgLSBuYW1lOiBDaGVja291dCBQeVlBTUwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjIKKworICAgIC0gbmFtZTogR2V0IGNhY2hlZCBsaWJ5YW1sIHN0YXRlCisgICAgICBpZDogY2FjaGVkX2xpYnlhbWwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2FjaGVAdjIKKyAgICAgIHdpdGg6CisgICAgICAgIHBhdGg6IGxpYnlhbWwKKyAgICAgICAga2V5OiBsaWJ5YW1sX21hY29zXyR7eyBtYXRyaXguYXJjaCB8fCAneDg2XzY0JyB9fV8ke3tlbnYuTElCWUFNTF9SRUZ9fQorCisgICAgLSBuYW1lOiBFbnN1cmUgbGlieWFtbCBmZXRjaGVkCisgICAgICBydW46IGV4aXQgMQorICAgICAgaWY6IHN0ZXBzLmNhY2hlZF9saWJ5YW1sLm91dHB1dHMuY2FjaGUtaGl0ICE9ICd0cnVlJworCisgICAgLSBuYW1lOiBCdWlsZC9UZXN0L1BhY2thZ2UKKyAgICAgIGVudjoKKyAgICAgICAgQ19JTkNMVURFX1BBVEg6IGxpYnlhbWwvaW5jbHVkZQorICAgICAgICBDSUJXX0JVSUxEOiAke3ttYXRyaXguc3BlY319CisgICAgICAgIENJQldfQlVJTERfVkVSQk9TSVRZOiAxCisgICAgICAgIENJQldfVEVTVF9DT01NQU5EOiBjZCB7cHJvamVjdH07IHB5dGhvbiB0ZXN0cy9saWIvdGVzdF9hbGwucHkKKyAgICAgICAgTElCUkFSWV9QQVRIOiBsaWJ5YW1sL3NyYy8ubGlicworICAgICAgICBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ6ICR7eyBtYXRyaXguZGVwbG95bWVudF90YXJnZXQgfHwgJzEwLjknIH19CisgICAgICAgIFNES1JPT1Q6ICR7eyBtYXRyaXguc2Rrcm9vdCB8fCAnbWFjb3N4JyB9fQorICAgICAgcnVuOiB8CisgICAgICAgIHB5dGhvbjMgLVYKKyAgICAgICAgcHl0aG9uMyAtbSBwaXAgaW5zdGFsbCAtVSAtLXVzZXIgY2lidWlsZHdoZWVsCisgICAgICAgIHB5dGhvbjMgLW0gY2lidWlsZHdoZWVsIC0tcGxhdGZvcm0gYXV0byAtLW91dHB1dC1kaXIgZGlzdCAuCisKKyAgICAtIG5hbWU6IFVwbG9hZCBhcnRpZmFjdHMKKyAgICAgIHVzZXM6IGFjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHYyCisgICAgICB3aXRoOgorICAgICAgICBuYW1lOiBkaXN0CisgICAgICAgIHBhdGg6IGRpc3QvKi53aGwKKyAgICAgICAgaWYtbm8tZmlsZXMtZm91bmQ6IGVycm9yCisKKyAgd2luZG93c19saWJ5YW1sOgorICAgIG5hbWU6IGxpYnlhbWwgJHt7bWF0cml4LnBsYXRmb3JtfX0gJHt7bWF0cml4LmFyY2h9fQorICAgIHJ1bnMtb246ICR7e21hdHJpeC5wbGF0Zm9ybX19CisgICAgc3RyYXRlZ3k6CisgICAgICBtYXRyaXg6CisgICAgICAgIGluY2x1ZGU6CisgICAgICAgIC0gcGxhdGZvcm06IHdpbmRvd3MtMjAxNgorICAgICAgICAgIGFyY2g6IHg2NAorICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyAgICAgICAgICBhcmNoOiB3aW4zMgorICAgIHN0ZXBzOgorICAgIC0gbmFtZTogR2V0IGNhY2hlZCBsaWJ5YW1sIHN0YXRlCisgICAgICBpZDogY2FjaGVkX2xpYnlhbWwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2FjaGVAdjIKKyAgICAgIHdpdGg6CisgICAgICAgIHBhdGg6IGxpYnlhbWwKKyAgICAgICAga2V5OiBsaWJ5YW1sXyR7e21hdHJpeC5wbGF0Zm9ybX19XyR7e21hdHJpeC5hcmNofX1fJHt7ZW52LkxJQllBTUxfUkVGfX0KKworICAgIC0gbmFtZTogQnVpbGQgbGlieWFtbAorICAgICAgc2hlbGw6IGJhc2gKKyAgICAgIGlmOiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKyAgICAgIHJ1bjogfAorICAgICAgICAjIGdpdCBzcGV3cyBhbGwgb3ZlciBzdGRlcnIgdW5sZXNzIHdlIHRlbGwgaXQgbm90IHRvCisgICAgICAgIGV4cG9ydCBHSVRfUkVESVJFQ1RfU1RERVJSPSIyPiYxIgorCisgICAgICAgIGlmIFtbICEgLWQgLi9saWJ5YW1sIF1dOyB0aGVuCisgICAgICAgICAgZ2l0IGNsb25lIC1iICR7eyBlbnYuTElCWUFNTF9SRUYgfX0gJHt7IGVudi5MSUJZQU1MX1JFUE8gfX0gMj4mMQorICAgICAgICBmaQorCisgICAgICAgIHB1c2hkIGxpYnlhbWwKKyAgICAgICAgZ2l0IGNsZWFuIC1mZHgKKyAgICAgICAgcG9wZAorCisgICAgICAgIG1rZGlyIGxpYnlhbWwvYnVpbGQKKworICAgICAgICBwdXNoZCBsaWJ5YW1sL2J1aWxkCisgICAgICAgIGNtYWtlLmV4ZSAtRyAiVmlzdWFsIFN0dWRpbyAxNSAyMDE3IiAtQSAke3sgbWF0cml4LmFyY2ggfX0gLURZQU1MX1NUQVRJQ19MSUJfTkFNRT15YW1sIC4uCisgICAgICAgIGNtYWtlLmV4ZSAtLWJ1aWxkIC4gLS1jb25maWcgUmVsZWFzZQorICAgICAgICBwb3BkCisKKworICB3aW5kb3dzX3B5eWFtbDoKKyAgICBuZWVkczogd2luZG93c19saWJ5YW1sCisgICAgbmFtZTogcHl5YW1sICR7eyBtYXRyaXgucGxhdGZvcm0gfX0gJHt7bWF0cml4LnB5dGhvbl9hcmNofX0gJHt7bWF0cml4LnNwZWN9fQorICAgIHJ1bnMtb246ICR7e21hdHJpeC5wbGF0Zm9ybX19CisgICAgc3RyYXRlZ3k6CisgICAgICBtYXRyaXg6CisgICAgICAgIGluY2x1ZGU6CisgICAgICAgIC0gcGxhdGZvcm06IHdpbmRvd3MtMjAxNgorICAgICAgICAgIGJ1aWxkX2FyY2g6IHg2NAorICAgICAgICAgIHB5dGhvbl9hcmNoOiB4NjQKKyAgICAgICAgICBzcGVjOiAzLjYKKyAgICAgICAgLSBwbGF0Zm9ybTogd2luZG93cy0yMDE2CisgICAgICAgICAgYnVpbGRfYXJjaDogeDY0CisgICAgICAgICAgcHl0aG9uX2FyY2g6IHg2NAorICAgICAgICAgIHNwZWM6IDMuNworICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyAgICAgICAgICBidWlsZF9hcmNoOiB4NjQKKyAgICAgICAgICBweXRob25fYXJjaDogeDY0CisgICAgICAgICAgc3BlYzogMy44CisgICAgICAgIC0gcGxhdGZvcm06IHdpbmRvd3MtMjAxNgorICAgICAgICAgIGJ1aWxkX2FyY2g6IHg2NAorICAgICAgICAgIHB5dGhvbl9hcmNoOiB4NjQKKyAgICAgICAgICBzcGVjOiAzLjkKKyAgICAgICAgLSBwbGF0Zm9ybTogd2luZG93cy0yMDE2CisgICAgICAgICAgYnVpbGRfYXJjaDogeDY0CisgICAgICAgICAgcHl0aG9uX2FyY2g6IHg2NAorICAgICAgICAgIHNwZWM6ICczLjEwJworICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyAgICAgICAgICBidWlsZF9hcmNoOiB3aW4zMgorICAgICAgICAgIHB5dGhvbl9hcmNoOiB4ODYKKyAgICAgICAgICBzcGVjOiAzLjYKKyAgICAgICAgLSBwbGF0Zm9ybTogd2luZG93cy0yMDE2CisgICAgICAgICAgYnVpbGRfYXJjaDogd2luMzIKKyAgICAgICAgICBweXRob25fYXJjaDogeDg2CisgICAgICAgICAgc3BlYzogMy43CisgICAgICAgIC0gcGxhdGZvcm06IHdpbmRvd3MtMjAxNgorICAgICAgICAgIGJ1aWxkX2FyY2g6IHdpbjMyCisgICAgICAgICAgcHl0aG9uX2FyY2g6IHg4NgorICAgICAgICAgIHNwZWM6IDMuOAorICAgICAgICAtIHBsYXRmb3JtOiB3aW5kb3dzLTIwMTYKKyAgICAgICAgICBidWlsZF9hcmNoOiB3aW4zMgorICAgICAgICAgIHB5dGhvbl9hcmNoOiB4ODYKKyAgICAgICAgICBzcGVjOiAzLjkKKyAgICAgICAgLSBwbGF0Zm9ybTogd2luZG93cy0yMDE2CisgICAgICAgICAgYnVpbGRfYXJjaDogd2luMzIKKyAgICAgICAgICBweXRob25fYXJjaDogeDg2CisgICAgICAgICAgc3BlYzogJzMuMTAnCisgICAgc3RlcHM6CisgICAgIyBhdXRvY3JsZiBzY3Jld3MgdXAgdGVzdHMgdW5kZXIgV2luZG93cworICAgIC0gbmFtZTogU2V0IGdpdCB0byB1c2UgTEYKKyAgICAgIHJ1bjogfAorICAgICAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIGNvcmUuYXV0b2NybGYgZmFsc2UKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLmVvbCBsZgorCisgICAgLSBuYW1lOiBDaGVja291dCBweXlhbWwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjIKKworICAgIC0gbmFtZTogR2V0IGNhY2hlZCBsaWJ5YW1sIHN0YXRlCisgICAgICBpZDogY2FjaGVkX2xpYnlhbWwKKyAgICAgIHVzZXM6IGFjdGlvbnMvY2FjaGVAdjIKKyAgICAgIHdpdGg6CisgICAgICAgIHBhdGg6IGxpYnlhbWwKKyAgICAgICAga2V5OiBsaWJ5YW1sXyR7e21hdHJpeC5wbGF0Zm9ybX19XyR7e21hdHJpeC5idWlsZF9hcmNofX1fJHt7ZW52LkxJQllBTUxfUkVGfX0KKworICAgIC0gbmFtZTogRW5zdXJlIGxpYnlhbWwgZmV0Y2hlZAorICAgICAgcnVuOiBleGl0IDEKKyAgICAgIGlmOiBzdGVwcy5jYWNoZWRfbGlieWFtbC5vdXRwdXRzLmNhY2hlLWhpdCAhPSAndHJ1ZScKKworICAgIC0gbmFtZTogSW5zdGFsbCBweXRob24gJHt7IG1hdHJpeC5zcGVjIH19CisgICAgICB1c2VzOiBhY3Rpb25zL3NldHVwLXB5dGhvbkB2MgorICAgICAgd2l0aDoKKyAgICAgICAgYXJjaGl0ZWN0dXJlOiAke3sgbWF0cml4LnB5dGhvbl9hcmNoIH19CisgICAgICAgIHB5dGhvbi12ZXJzaW9uOiAke3sgbWF0cml4LnNwZWMgfX0KKworICAgIC0gbmFtZTogQnVpbGQvVGVzdC9QYWNrYWdlCisgICAgICBlbnY6CisgICAgICAgIFBZWUFNTF9GT1JDRV9DWVRIT046IDEKKyAgICAgICAgUFlZQU1MX0ZPUkNFX0xJQllBTUw6IDEKKyAgICAgIHNoZWxsOiBiYXNoCisgICAgICBydW46IHwKKyAgICAgICAgc2V0IC1ldXgKKyAgICAgICAgcHl0aG9uIC1WCisgICAgICAgIHB5dGhvbiAtbSBwaXAgaW5zdGFsbCBDeXRob24gd2hlZWwKKworICAgICAgICBweXRob24gc2V0dXAucHkgXAorICAgICAgICAtLXdpdGgtbGlieWFtbCBidWlsZF9leHQgXAorICAgICAgICAtSSBsaWJ5YW1sL2luY2x1ZGUgXAorICAgICAgICAtTCBsaWJ5YW1sL2J1aWxkL1JlbGVhc2UgXAorICAgICAgICAtRCBZQU1MX0RFQ0xBUkVfU1RBVElDIFwKKyAgICAgICAgYnVpbGQgYmRpc3Rfd2hlZWwKKworICAgICAgICAjIHJ1biB0ZXN0cyBvbiBidWlsdCB3aGVlbAorICAgICAgICBweXRob24gLW0gcGlwIGluc3RhbGwgZGlzdC8qLndobAorICAgICAgICBweXRob24gdGVzdHMvbGliL3Rlc3RfYWxsLnB5CisKKyAgICAtIG5hbWU6IFVwbG9hZCBhcnRpZmFjdHMKKyAgICAgIHVzZXM6IGFjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHYyCisgICAgICB3aXRoOgorICAgICAgICBuYW1lOiBkaXN0CisgICAgICAgIHBhdGg6IGRpc3QvKi53aGwKKyAgICAgICAgaWYtbm8tZmlsZXMtZm91bmQ6IGVycm9yCisuLi4KZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MzFlNDgKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTkgQEAKKyMgYnVpbGQgb3V0cHV0cworL2Rpc3QvKgorL2J1aWxkLyoKKy9saWIvUHlZQU1MLmVnZy1pbmZvLyoKKy93aGVlbGhvdXNlLyoKKy95YW1sL195YW1sLmMKK01BTklGRVNUCisqKi8qLnNvCisqKi8qLmR5bGliCisqKi8qLnB5ZAorCisKKyMgY2FjaGVkIFB5dGhvbiBiaW5hcmllcworKi5weVtjZG9dCitfcHljYWNoZV8vKgorCisjIGxvY2FsIElERSBzdGF0ZQorLy5pZGVhLyoKKwpkaWZmIC0tZ2l0IGEvQW5kcm9pZC5icCBiL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5NmY3MwotLS0gL2Rldi9udWxsCisrKyBiL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwyOSBAQAorLy8KKy8vIENvcHlyaWdodCAoQykgMjAyMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiZXh0ZXJuYWxfcHl0aG9uX3B5eWFtbF9saWNlbnNlIl0sCit9CisKK2xpY2Vuc2UgeworICAgIG5hbWU6ICJleHRlcm5hbF9weXRob25fcHl5YW1sX2xpY2Vuc2UiLAorICAgIHZpc2liaWxpdHk6IFsiOl9fc3VicGFja2FnZXNfXyJdLAorICAgIGxpY2Vuc2Vfa2luZHM6IFsKKyAgICAgICAgIlNQRFgtbGljZW5zZS1pZGVudGlmaWVyLU1JVCIsCisgICAgXSwKKyAgICBsaWNlbnNlX3RleHQ6IFsKKyAgICAgICAgIkxJQ0VOU0UiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS9DSEFOR0VTIGIvQ0hBTkdFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdkOWJlCi0tLSAvZGV2L251bGwKKysrIGIvQ0hBTkdFUwpAQCAtMCwwICsxLDI2NyBAQAorCitGb3IgYSBjb21wbGV0ZSBjaGFuZ2Vsb2csIHNlZToKKworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvY29tbWl0cy8KKyogaHR0cHM6Ly9iaXRidWNrZXQub3JnL3hpL3B5eWFtbC9jb21taXRzLworCis2LjAgKDIwMjEtMTAtMTMpCisKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMzI3IC0tIENoYW5nZSBSRUFETUUgZm9ybWF0IHRvIE1hcmtkb3duCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzQ4MyAtLSBBZGQgYSB0ZXN0IGZvciBZQU1MIDEuMSB0eXBlcworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC80OTcgLS0gZml4IGZsb2F0IHJlc29sdmVyIHRvIGlnbm9yZSBgLmAgYW5kIGAuX2AKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNTUwIC0tIGRyb3AgUHl0aG9uIDIuNworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC81NTMgLS0gRml4IHNwZWxsaW5nIG9mIOKAnGhleGFkZWNpbWFs4oCdCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzU1NiAtLSBmaXggcmVwcmVzZW50YXRpb24gb2YgRW51bSBzdWJjbGFzc2VzCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzU1NyAtLSBmaXggbGlieWFtbCBleHRlbnNpb24gY29tcGlsZXIgd2FybmluZ3MKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNTYwIC0tIGZpeCBSZXNvdXJjZVdhcm5pbmcgb24gbGVha2VkIGZpbGUgZGVzY3JpcHRvcnMKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNTYxIC0tIGFsd2F5cyByZXF1aXJlIGBMb2FkZXJgIGFyZyB0byBgeWFtbC5sb2FkKClgCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzU2NCAtLSByZW1vdmUgcmVtYWluaW5nIGRpcmVjdCBkaXN0dXRpbHMgdXNhZ2UKKworNS40LjEgKDIwMjEtMDEtMjApCisKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNDgwIC0tIEZpeCBzdHViIGNvbXBhdCB3aXRoIG9sZGVyIHB5eWFtbCB2ZXJzaW9ucyB0aGF0IG1heSB1bndpdHRpbmdseSBsb2FkIGl0CisKKzUuNCAoMjAyMS0wMS0xOSkKKworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC80MDcgLS0gQnVpbGQgbW9kZXJuaXphdGlvbiwgcmVtb3ZlIGRpc3R1dGlscywgZml4IG1ldGFkYXRhLCBidWlsZCB3aGVlbHMsIENJIHRvIEdIQQorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC80NzIgLS0gRml4IGZvciBDVkUtMjAyMC0xNDM0MywgbW92ZXMgYXJiaXRyYXJ5IHB5dGhvbiB0YWdzIHRvIFVuc2FmZUxvYWRlcgorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC80NDEgLS0gRml4IG1lbW9yeSBsZWFrIGluIGltcGxpY2l0IHJlc29sdmVyIHNldHVwCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzM5MiAtLSBGaXggcHkyIGNvcHkgc3VwcG9ydCBmb3IgdGltZXpvbmUgb2JqZWN0cworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8zNzggLS0gRml4IGNvbXBhdGliaWxpdHkgd2l0aCBKeXRob24KKworNS4zLjEgKDIwMjAtMDMtMTgpCisKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMzg2IC0tIFByZXZlbnRzIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiBkdXJpbmcgcHl0aG9uL29iamVjdC9uZXcgY29uc3RydWN0b3IKKworNS4zICgyMDIwLTAxLTA2KQorCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzI5MCAtLSBVc2UgYGlzYCBpbnN0ZWFkIG9mIGVxdWFsaXR5IGZvciBjb21wYXJpbmcgd2l0aCBgTm9uZWAKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMjcwIC0tIEZpeCB0eXBvcyBhbmQgc3R5bGlzdGljIG5pdAorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8zMDkgLS0gRml4IHVwIHNtYWxsIHR5cG8KKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMTYxIC0tIEZpeCBoYW5kbGluZyBvZiBfX3Nsb3RzX18KKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMzU4IC0tIEFsbG93IGNhbGxpbmcgYWRkX211bHRpX2NvbnN0cnVjdG9yIHdpdGggTm9uZQorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8yODUgLS0gQWRkIHVzZSBvZiBzYWZlX2xvYWQoKSBmdW5jdGlvbiBpbiBSRUFETUUKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMzUxIC0tIEZpeCByZWFkZXIgZm9yIFVuaWNvZGUgY29kZSBwb2ludHMgb3ZlciAweEZGRkYKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMzYwIC0tIEVuYWJsZSBjZXJ0YWluIHVuaWNvZGUgdGVzdHMgd2hlbiBtYXh1bmljb2RlIG5vdCA+IDB4ZmZmZgorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8zNTkgLS0gVXNlIGZ1bGxfbG9hZCBpbiB5YW1sLWhpZ2hsaWdodCBleGFtcGxlCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzI0NCAtLSBEb2N1bWVudCB0aGF0IFB5WUFNTCBpcyBpbXBsZW1lbnRlZCB3aXRoIEN5dGhvbgorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8zMjkgLS0gRml4IGZvciBQeXRob24gMy4xMAorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8zMTAgLS0gSW5jcmVhc2Ugc2l6ZSBvZiBpbmRleCwgbGluZSwgYW5kIGNvbHVtbiBmaWVsZHMKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMjYwIC0tIFJlbW92ZSBzb21lIHVudXNlZCBpbXBvcnRzCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzE2MyAtLSBDcmVhdGUgdGltZXpvbmUtYXdhcmUgZGF0ZXRpbWVzIHdoZW4gcGFyc2VkIGFzIHN1Y2gKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMzYzIC0tIEFkZCB0ZXN0cyBmb3IgdGltZXpvbmUKKworNS4yICgyMDE5LTEyLTAyKQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogUmVwYWlyIGluY29tcGF0aWJpbGl0aWVzIGludHJvZHVjZWQgd2l0aCA1LjEuIFRoZSBkZWZhdWx0IExvYWRlciB3YXMgY2hhbmdlZCwKKyAgYnV0IHNldmVyYWwgbWV0aG9kcyBsaWtlIGFkZF9jb25zdHJ1Y3RvciBzdGlsbCB1c2VkIHRoZSBvbGQgZGVmYXVsdAorICBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8yNzkgLS0gQSBtb3JlIGZsZXhpYmxlIGZpeCBmb3IgY3VzdG9tIHRhZyBjb25zdHJ1Y3RvcnMKKyAgaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMjg3IC0tIENoYW5nZSBkZWZhdWx0IGxvYWRlciBmb3IgeWFtbC5hZGRfY29uc3RydWN0b3IKKyAgaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMzA1IC0tIENoYW5nZSBkZWZhdWx0IGxvYWRlciBmb3IgYWRkX2ltcGxpY2l0X3Jlc29sdmVyLCBhZGRfcGF0aF9yZXNvbHZlcgorKiBNYWtlIEZ1bGxMb2FkZXIgc2FmZXIgYnkgcmVtb3ZpbmcgcHl0aG9uL29iamVjdC9hcHBseSBmcm9tIHRoZSBkZWZhdWx0IEZ1bGxMb2FkZXIKKyAgaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMzQ3IC0tIE1vdmUgY29uc3RydWN0b3IgZm9yIG9iamVjdC9hcHBseSB0byBVbnNhZmVDb25zdHJ1Y3RvcgorKiBGaXggYnVnIGludHJvZHVjZWQgaW4gNS4xIHdoZXJlIHF1b3Rpbmcgd2VudCB3cm9uZyBvbiBzeXN0ZW1zIHdpdGggc3lzLm1heHVuaWNvZGUgPD0gMHhmZmZmCisgIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzI3NiAtLSBGaXggbG9naWMgZm9yIHF1b3Rpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzCisqIE90aGVyIFBSczoKKyAgaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMjgwIC0tIFVwZGF0ZSBDSEFOR0VTIGZvciA1LjEKKworNS4xLjIgKDIwMTktMDctMzApCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiBSZS1yZWxlYXNlIG9mIDUuMSB3aXRoIHJlZ2VuZXJhdGVkIEN5dGhvbiBzb3VyY2VzIHRvIGJ1aWxkIHByb3Blcmx5IGZvciBQeXRob24gMy44YjIrCisKKzUuMS4xICgyMDE5LTA2LTA1KQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogUmUtcmVsZWFzZSBvZiA1LjEgd2l0aCByZWdlbmVyYXRlZCBDeXRob24gc291cmNlcyB0byBidWlsZCBwcm9wZXJseSBmb3IgUHl0aG9uIDMuOGIxCisKKzUuMSAoMjAxOS0wMy0xMykKKy0tLS0tLS0tLS0tLS0tLS0KKworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8zNSAtLSBTb21lIG1vZGVybml6YXRpb24gb2YgdGhlIHRlc3QgcnVubmluZworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC80MiAtLSBJbnN0YWxsIHRveCBpbiBhIHZpcnR1YWxlbnYKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNDUgLS0gQWxsb3cgY29sb24gaW4gYSBwbGFpbiBzY2FsYXIgaW4gYSBmbG93IGNvbnRleHQKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNDggLS0gRml4IHR5cG9zCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzU1IC0tIEltcHJvdmUgUmVwcmVzZW50ZXJFcnJvciBjcmVhdGlvbgorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC81OSAtLSBSZXNvbHZlcyAjNTcsIHVwZGF0ZSByZWFkbWUgaXNzdWVzIGxpbmsKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNjAgLS0gRG9jdW1lbnQgYW5kIHRlc3QgUHl0aG9uIDMuNiBzdXBwb3J0CisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzYxIC0tIFVzZSBUcmF2aXMgQ0kgYnVpbHQgaW4gcGlwIGNhY2hlIHN1cHBvcnQKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNjIgLS0gUmVtb3ZlIHRveCB3b3JrYXJvdW5kIGZvciBUcmF2aXMgQ0kKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNjMgLS0gQWRkaW5nIHN1cHBvcnQgdG8gVW5pY29kZSBjaGFyYWN0ZXJzIG92ZXIgY29kZXBvaW50IDB4ZmZmZgorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC83NSAtLSBhZGQgMy4xMiBjaGFuZ2Vsb2cKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNzYgLS0gRmFsbGJhY2sgdG8gUHVyZSBQeXRob24gaWYgQ29tcGlsYXRpb24gZmFpbHMKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvODQgLS0gRHJvcCB1bnN1cHBvcnRlZCBQeXRob24gMy4zCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzEwMiAtLSBJbmNsdWRlIGxpY2Vuc2UgZmlsZSBpbiB0aGUgZ2VuZXJhdGVkIHdoZWVsIHBhY2thZ2UKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMTA1IC0tIFJlbW92ZWQgUHl0aG9uIDIuNiAmIDMuMyBzdXBwb3J0CisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzExMSAtLSBSZW1vdmUgY29tbWVudGVkIG91dCBQc3ljbyBjb2RlCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzEyOSAtLSBSZW1vdmUgY2FsbCB0byBgb3JkYCBpbiBsaWIzIGVtaXR0ZXIgY29kZQorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8xNDkgLS0gVGVzdCBvbiBQeXRob24gMy43LWRldgorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8xNTggLS0gU3VwcG9ydCBlc2NhcGVkIHNsYXNoIGluIGRvdWJsZSBxdW90ZXMgIlwvIgorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8xNzUgLS0gVXBkYXRlZCBsaW5rIHRvIHB5cGkgaW4gcmVsZWFzZSBhbm5vdW5jZW1lbnQKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMTgxIC0tIEltcG9ydCBIYXNoYWJsZSBmcm9tIGNvbGxlY3Rpb25zLmFiYworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8xOTQgLS0gUmV2ZXJ0aW5nIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzc0CisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzE5NSAtLSBCdWlsZCBsaWJ5YW1sIG9uIHRyYXZpcworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8xOTYgLS0gRm9yY2UgY3l0aG9uIHdoZW4gYnVpbGRpbmcgc2Rpc3QKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvMjU0IC0tIEFsbG93IHRvIHR1cm4gb2ZmIHNvcnRpbmcga2V5cyBpbiBEdW1wZXIgKDIpCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzI1NiAtLSBNYWtlIGRlZmF1bHRfZmxvd19zdHlsZT1GYWxzZQorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC8yNTcgLS0gRGVwcmVjYXRlIHlhbWwubG9hZCBhbmQgYWRkIEZ1bGxMb2FkZXIgYW5kIFVuc2FmZUxvYWRlciBjbGFzc2VzCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzI2MSAtLSBTa2lwIGNlcnRhaW4gdW5pY29kZSB0ZXN0cyB3aGVuIG1heHVuaWNvZGUgbm90ID4gMHhmZmZmCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzI2MyAtLSBXaW5kb3dzIEFwcHZleW9yIGJ1aWxkCisKKzMuMTMgKDIwMTgtMDctMDUpCistLS0tLS0tLS0tLS0tLS0tLQorCisqIFJlc29sdmVkIGlzc3VlcyBhcm91bmQgUHlZQU1MIHdvcmtpbmcgaW4gUHl0aG9uIDMuNy4KKworMy4xMiAoMjAxNi0wOC0yOCkKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogV2hlZWwgcGFja2FnZXMgZm9yIFdpbmRvd3MgYmluYXJpZXMuCisqIEFkZGluZyBhbiBpbXBsaWNpdCByZXNvbHZlciB0byBhIGRlcml2ZWQgbG9hZGVyIHNob3VsZCBub3QgYWZmZWN0IHRoZSBiYXNlIGxvYWRlci4KKyogVW5pZm9ybSByZXByZXNlbnRhdGlvbiBmb3IgT3JkZXJlZERpY3Q/IGFjcm9zcyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgUHl0aG9uLgorKiBGaXhlZCBjb21wYXJpc29uIHRvIE5vbmUgd2FybmluZy4KKworMy4xMSAoMjAxNC0wMy0yNikKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogU291cmNlIGFuZCBiaW5hcnkgZGlzdHJpYnV0aW9ucyBhcmUgcmVidWlsdCBhZ2FpbnN0IHRoZSBsYXRlc3QKKyAgdmVyc2lvbnMgb2YgQ3l0aG9uIGFuZCBMaWJZQU1MLgorCiszLjEwICgyMDExLTA1LTMwKQorLS0tLS0tLS0tLS0tLS0tLS0KKworKiBEbyBub3QgdHJ5IHRvIGJ1aWxkIExpYllBTUwgYmluZGluZ3Mgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gQ1B5dGhvbgorICAoVGhhbmsgdG8gb2x0KGF0KWJvZ29zb2Z0KGRvdCljb20pLgorKiBDbGVhciBjeWNsaWMgcmVmZXJlbmNlcyBpbiB0aGUgcGFyc2VyIGFuZCB0aGUgZW1pdHRlcgorICAoVGhhbmsgdG8ga3Jpc3RqYW4oYXQpY2NwZ2FtZXMoZG90KWNvbSkuCisqIERyb3BwZWQgc3VwcG9ydCBmb3IgUHl0aG9uIDIuMyBhbmQgMi40LgorCiszLjA5ICgyMDA5LTA4LTMxKQorLS0tLS0tLS0tLS0tLS0tLS0KKworKiBGaXhlZCBhbiBvYnNjdXJlIHNjYW5uZXIgZXJyb3Igbm90IHJlcG9ydGVkIHdoZW4gdGhlcmUgaXMKKyAgbm8gbGluZSBicmVhayBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gKFRoYW5rIHRvIEluZ3kpLgorKiBGaXhlZCB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgd2hlbiBlbWl0dGluZyBhbmNob3JzIHdpdGgKKyAgTGliWUFNTCBiaW5kaW5ncyAoVGhhbmsgdG8gY2VnbmVyKGF0KXlhaG9vLWluYyhkb3QpY29tKS4KKyogRml4ZWQgZW1pdHRpbmcgaW5jb3JyZWN0IEJPTSBjaGFyYWN0ZXJzIGZvciBVVEYtMTYgKFRoYW5rIHRvCisgIFZhbGVudGluIE5lY2hheWV2KQorKiBGaXhlZCB0aGUgZW1pdHRlciBmb3IgZm9sZGVkIHNjYWxhcnMgbm90IHJlc3BlY3RpbmcgdGhlIHByZWZlcnJlZAorICBsaW5lIHdpZHRoIChUaGFuayB0byBJbmd5KS4KKyogRml4ZWQgYSBzdWJ0bGUgb3JkZXJpbmcgaXNzdWUgd2l0aCBlbWl0dGluZyAnJVRBRycgZGlyZWN0aXZlcworICAoVGhhbmsgdG8gQW5kcmV5IFNvbW92KS4KKyogRml4ZWQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRoIExpYllBTUwgYmluZGluZ3MuCisKKworMy4wOCAoMjAwOC0xMi0zMSkKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogUHl0aG9uIDMgc3VwcG9ydCAoVGhhbmsgdG8gRXJpY2sgVHJ5emVsYWFyKS4KKyogVXNlIEN5dGhvbiBpbnN0ZWFkIG9mIFB5cmV4IHRvIGJ1aWxkIExpYllBTUwgYmluZGluZ3MuCisqIFJlZmFjdG9yZWQgc3VwcG9ydCBmb3IgdW5pY29kZSBhbmQgYnl0ZSBpbnB1dC9vdXRwdXQgc3RyZWFtcy4KKworCiszLjA3ICgyMDA4LTEyLTI5KQorLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgZW1pdHRlciBsZWFybmVkIHRvIHVzZSBhbiBvcHRpb25hbCBpbmRlbnRhdGlvbiBpbmRpY2F0b3IKKyAgZm9yIGJsb2NrIHNjYWxhcjsgdGh1cyBzY2FsYXJzIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlcworICBjb3VsZCBub3cgYmUgcmVwcmVzZW50ZWQgaW4gYSBsaXRlcmFsIG9yIGZvbGRlZCBzdHlsZS4KKyogVGhlIHRlc3Qgc3VpdGUgaXMgbm93IGluY2x1ZGVkIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorICBUbyBydW4gdGhlIHRlc3RzLCB0eXBlICdweXRob24gc2V0dXAucHkgdGVzdCcuCisqIFJlZmFjdG9yZWQgdGhlIHRlc3Qgc3VpdGU6IGRyb3BwZWQgdW5pdHRlc3QgaW4gZmF2b3Igb2YKKyAgYSBjdXN0b20gdGVzdCBhcHBsaWFuY2UuCisqIEZpeGVkIHRoZSBwYXRoIHJlc29sdmVyIGluIENEdW1wZXIuCisqIEZvcmNlZCBhbiBleHBsaWNpdCBkb2N1bWVudCBlbmQgaW5kaWNhdG9yIHdoZW4gdGhlcmUgaXMKKyAgYSBwb3NzaWJpbGl0eSBvZiBwYXJzaW5nIGFtYmlndWl0eS4KKyogTW9yZSBzZXR1cC5weSBpbXByb3ZlbWVudHM6IHRoZSBwYWNrYWdlIHNob3VsZCBiZSB1c2FibGUKKyAgd2hlbiBhbnkgY29tYmluYXRpb24gb2Ygc2V0dXB0b29scywgUHlyZXggYW5kIExpYllBTUwKKyAgaXMgaW5zdGFsbGVkLgorKiBXaW5kb3dzIGJpbmFyeSBwYWNrYWdlcyBhcmUgYnVpbHQgYWdhaW5zdCBMaWJZQU1MLTAuMS4yLgorKiBNaW5vciB0eXBvcyBhbmQgY29ycmVjdGlvbnMgKFRoYW5rIHRvIEluZ3kgZG90IE5ldAorICBhbmQgQW5kcmV5IFNvbW92KS4KKworCiszLjA2ICgyMDA4LTEwLTAzKQorLS0tLS0tLS0tLS0tLS0tLS0KKworKiBzZXR1cC5weSBjaGVja3Mgd2hldGhlciBMaWJZQU1MIGlzIGluc3RhbGxlZCBhbmQgaWYgc28sIGJ1aWxkcworICBhbmQgaW5zdGFsbHMgTGliWUFNTCBiaW5kaW5ncy4gIFRvIGZvcmNlIG9yIGRpc2FibGUgaW5zdGFsbGF0aW9uCisgIG9mIExpYllBTUwgYmluZGluZ3MsIHVzZSAnLS13aXRoLWxpYnlhbWwnIG9yICctLXdpdGhvdXQtbGlieWFtbCcKKyAgcmVzcGVjdGl2ZWx5LgorKiBUaGUgc291cmNlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBjb21waWxlZCBQeXJleCBzb3VyY2VzIHNvCisgIGJ1aWxkaW5nIExpYllBTUwgYmluZGluZ3Mgbm8gbG9uZ2VyIHJlcXVpcmVzIFB5cmV4IGluc3RhbGxlZC4KKyogJ3lhbWwubG9hZCgpJyByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZSBpbnB1dCBzdHJlYW0gY29udGFpbnMKKyAgbW9yZSB0aGFuIG9uZSBZQU1MIGRvY3VtZW50LgorKiBGaXhlZCBleGNlcHRpb25zIHByb2R1Y2VkIGJ5IExpYllBTUwgYmluZGluZ3MuCisqIEZpeGVkIGEgZG90ICcuJyBjaGFyYWN0ZXIgYmVpbmcgcmVjb2duaXplZCBhcyAhIWZsb2F0LgorKiBGaXhlZCBQeXRob24gMi4zIGNvbXBhdGliaWxpdHkgaXNzdWUgaW4gY29uc3RydWN0aW5nICEhdGltZXN0YW1wIHZhbHVlcy4KKyogV2luZG93cyBiaW5hcnkgcGFja2FnZXMgYXJlIGJ1aWx0IGFnYWluc3QgdGhlIExpYllBTUwgc3RhYmxlIGJyYW5jaC4KKyogQWRkZWQgYXR0cmlidXRlcyAneWFtbC5fX3ZlcnNpb25fXycgYW5kICAneWFtbC5fX3dpdGhfbGlieWFtbF9fJy4KKworCiszLjA1ICgyMDA3LTA1LTEzKQorLS0tLS0tLS0tLS0tLS0tLS0KKworKiBXaW5kb3dzIGJpbmFyeSBwYWNrYWdlcyB3ZXJlIGJ1aWx0IHdpdGggTGliWUFNTCB0cnVuay4KKyogRml4ZWQgYSBidWcgdGhhdCBwcmV2ZW50IHByb2Nlc3NpbmcgYSBsaXZlIHN0cmVhbSBvZiBZQU1MIGRvY3VtZW50cyBpbgorICB0aW1lbHkgbWFubmVyIChUaGFua3MgZWR3YXJkKGF0KXN3ZWV0Ynl0ZXMoZG90KW5ldCkuCisqIEZpeGVkIGEgYnVnIHdoZW4gdGhlIHBhdGggaW4gYWRkX3BhdGhfcmVzb2x2ZXIgY29udGFpbnMgYm9vbGVhbiB2YWx1ZXMKKyAgKFRoYW5rcyBqc3Ryb3VkKGF0KW1iaShkb3QpdWNsYShkb3QpZWR1KS4KKyogRml4ZWQgbG9zcyBvZiBtaWNyb3NlY29uZCBwcmVjaXNpb24gaW4gdGltZXN0YW1wcworICAoVGhhbmtzIGVkZW1haW5lKGF0KW1pdChkb3QpZWR1KS4KKyogRml4ZWQgbG9hZGluZyBhbiBlbXB0eSBZQU1MIHN0cmVhbS4KKyogQWxsb3dlZCBpbW11dGFibGUgc3ViY2xhc3NlcyBvZiBZQU1MT2JqZWN0LgorKiBNYWRlIHRoZSBlbmNvZGluZyBvZiB0aGUgdW5pY29kZS0+c3RyIGNvbnZlcnNpb24gZXhwbGljaXQgc28gdGhhdAorICB0aGUgY29udmVyc2lvbiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGRlZmF1bHQgUHl0aG9uIGVuY29kaW5nLgorKiBGb3JjZWQgZW1pdHRpbmcgZmxvYXQgdmFsdWVzIGluIGEgWUFNTCBjb21wYXRpYmxlIGZvcm0uCisKKworMy4wNCAoMjAwNi0wOC0yMCkKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogSW5jbHVkZSBleHBlcmltZW50YWwgTGliWUFNTCBiaW5kaW5ncy4KKyogRnVsbHkgc3VwcG9ydCByZWN1cnNpdmUgc3RydWN0dXJlcy4KKyogU29ydCBkaWN0aW9uYXJ5IGtleXMuICBNYXBwaW5nIG5vZGUgdmFsdWVzIGFyZSBub3cgcmVwcmVzZW50ZWQKKyAgYXMgbGlzdHMgb2YgcGFpcnMgaW5zdGVhZCBvZiBkaWN0aW9uYXJpZXMuICBObyBsb25nZXIgY2hlY2sKKyAgZm9yIGR1cGxpY2F0ZSBtYXBwaW5nIGtleXMgYXMgaXQgZGlkbid0IHdvcmsgY29ycmVjdGx5IGFueXdheS4KKyogRml4IGludmFsaWQgb3V0cHV0IG9mIHNpbmdsZS1xdW90ZWQgc2NhbGFycyBpbiBjYXNlcyB3aGVuIGEgc2luZ2xlCisgIHF1b3RlIGlzIG5vdCBlc2NhcGVkIHdoZW4gcHJlY2VkZWQgYnkgd2hpdGVzcGFjZXMgb3IgbGluZSBicmVha3MuCisqIFRvIG1ha2UgcG9ydGluZyBlYXNpZXIsIHJld3JpdGUgUGFyc2VyIG5vdCB1c2luZyBnZW5lcmF0b3JzLgorKiBGaXggaGFuZGxpbmcgb2YgdW5leHBlY3RlZCBibG9jayBtYXBwaW5nIHZhbHVlcy4KKyogRml4IGEgYnVnIGluIFJlcHJlc2VudGVyLnJlcHJlc2VudF9vYmplY3Q6IGNvcHlfcmVnLmRpc3BhdGNoX3RhYmxlCisgIHdhcyBub3QgY29ycmVjdGx5IGhhbmRsZWQuCisqIEZpeCBhIGJ1ZyB3aGVuIGEgYmxvY2sgc2NhbGFyIGlzIGluY29ycmVjdGx5IGVtaXR0ZWQgaW4gdGhlIHNpbXBsZQorICBrZXkgY29udGV4dC4KKyogSG9sZCByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3RzIGJlaW5nIHJlcHJlc2VudGVkLgorKiBNYWtlIFJlcHJlc2VudGVyIG5vdCB0cnkgdG8gZ3Vlc3MgISFwYWlycyB3aGVuIGEgbGlzdCBpcyByZXByZXNlbnRlZC4KKyogRml4IHRpbWVzdGFtcCBjb25zdHJ1Y3RpbmcgYW5kIHJlcHJlc2VudGluZy4KKyogRml4IHRoZSAnTicgcGxhaW4gc2NhbGFyIGJlaW5nIGluY29ycmVjdGx5IHJlY29nbml6ZWQgYXMgISFib29sLgorCisKKzMuMDMgKDIwMDYtMDYtMTkpCistLS0tLS0tLS0tLS0tLS0tLQorCisqIEZpeCBQeXRob24gMi41IGNvbXBhdGliaWxpdHkgaXNzdWVzLgorKiBGaXggbnVtZXJvdXMgYnVncyBpbiB0aGUgZmxvYXQgaGFuZGxpbmcuCisqIEZpeCBzY2FubmluZyBzb21lIGlsbC1mb3JtZWQgZG9jdW1lbnRzLgorKiBPdGhlciBtaW5vciBmaXhlcy4KKworCiszLjAyICgyMDA2LTA1LTE1KQorLS0tLS0tLS0tLS0tLS0tLS0KKworKiBGaXggd2luMzIgaW5zdGFsbGVyLiAgQXBwYXJlbnRseSBiZGlzdF93aW5pbnN0IGRvZXMgbm90IHdvcmsgd2VsbAorICB1bmRlciBMaW51eC4KKyogRml4IGEgYnVnIGluIGFkZF9wYXRoX3Jlc29sdmVyLgorKiBBZGQgdGhlIHlhbWwtaGlnaGxpZ2h0IGV4YW1wbGUuICBUcnkgdG8gcnVuIG9uIGEgY29sb3IgdGVybWluYWw6CisgIGBweXRob24geWFtbF9obC5weSA8YW55X2RvY3VtZW50LnlhbWxgLgorCisKKzMuMDEgKDIwMDYtMDUtMDcpCistLS0tLS0tLS0tLS0tLS0tLQorCisqIEluaXRpYWwgcmVsZWFzZS4gIFRoZSB2ZXJzaW9uIG51bWJlciByZWZsZWN0cyB0aGUgY29kZW5hbWUKKyAgb2YgdGhlIHByb2plY3QgKFB5WUFNTCAzMDAwKSBhbmQgZGlmZmVyZW50aWF0ZXMgaXQgZnJvbQorICB0aGUgYWJhbmRvbmVkIFB5WWFtbCBtb2R1bGUuCisKZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMWI4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTlNFCkBAIC0wLDAgKzEsMjAgQEAKK0NvcHlyaWdodCAoYykgMjAxNy0yMDIxIEluZ3kgZMO2dCBOZXQKK0NvcHlyaWdodCAoYykgMjAwNi0yMDE2IEtpcmlsbCBTaW1vbm92CisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvTUFOSUZFU1QuaW4gYi9NQU5JRkVTVC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWIwYzRmCi0tLSAvZGV2L251bGwKKysrIGIvTUFOSUZFU1QuaW4KQEAgLTAsMCArMSw3IEBACitpbmNsdWRlIENIQU5HRVMgUkVBRE1FIExJQ0VOU0UgTWFrZWZpbGUgcHlwcm9qZWN0LnRvbWwgc2V0dXAucHkKK3JlY3Vyc2l2ZS1pbmNsdWRlIGxpYi95YW1sICoucHkKK3JlY3Vyc2l2ZS1pbmNsdWRlIGxpYi9feWFtbCAqLnB5CityZWN1cnNpdmUtaW5jbHVkZSBleGFtcGxlcyAqLnB5ICouY2ZnICoueWFtbAorcmVjdXJzaXZlLWluY2x1ZGUgdGVzdHMvZGF0YSAqCityZWN1cnNpdmUtaW5jbHVkZSB0ZXN0cy9saWIgKi5weQorcmVjdXJzaXZlLWluY2x1ZGUgeWFtbCAqCmRpZmYgLS1naXQgYS9NRVRBREFUQSBiL01FVEFEQVRBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NDZjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9NRVRBREFUQQpAQCAtMCwwICsxLDE3IEBACituYW1lOiAicHl5YW1sIgorZGVzY3JpcHRpb246CisgICAgIkEgZnVsbC1mZWF0dXJlZCBZQU1MIHByb2Nlc3NpbmcgZnJhbWV3b3JrIGZvciBQeXRob24iCisKK3RoaXJkX3BhcnR5IHsKKyAgdXJsIHsKKyAgICB0eXBlOiBIT01FUEFHRQorICAgIHZhbHVlOiAiaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sLmdpdCIKKyAgfQorICB1cmwgeworICAgIHR5cGU6IEdJVAorICAgIHZhbHVlOiAiaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sLmdpdCIKKyAgfQorICB2ZXJzaW9uOiAiNi4wIgorICBsYXN0X3VwZ3JhZGVfZGF0ZSB7IHllYXI6IDIwMjIgbW9udGg6IDUgZGF5OiAyMCB9CisgIGxpY2Vuc2VfdHlwZTogTk9USUNFCit9CmRpZmYgLS1naXQgYS9NT0RVTEVfTElDRU5TRV9NSVQgYi9NT0RVTEVfTElDRU5TRV9NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL01PRFVMRV9MSUNFTlNFX01JVApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGExZDQwCi0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUKQEAgLTAsMCArMSw1MSBAQAorCisuUEhPTlk6IGJ1aWxkIGRpc3QKKworUFlUSE9OPS91c3IvYmluL3B5dGhvbjMKK1RFU1Q9CitQQVJBTUVURVJTPQorCitidWlsZDoKKwkke1BZVEhPTn0gc2V0dXAucHkgYnVpbGQgJHtQQVJBTUVURVJTfQorCitidWlsZGV4dDoKKwkke1BZVEhPTn0gc2V0dXAucHkgLS13aXRoLWxpYnlhbWwgYnVpbGQgJHtQQVJBTUVURVJTfQorCitmb3JjZToKKwkke1BZVEhPTn0gc2V0dXAucHkgYnVpbGQgLWYgJHtQQVJBTUVURVJTfQorCitmb3JjZWV4dDoKKwkke1BZVEhPTn0gc2V0dXAucHkgLS13aXRoLWxpYnlhbWwgYnVpbGQgLWYgJHtQQVJBTUVURVJTfQorCitpbnN0YWxsOgorCSR7UFlUSE9OfSBzZXR1cC5weSBpbnN0YWxsICR7UEFSQU1FVEVSU30KKworaW5zdGFsbGV4dDoKKwkke1BZVEhPTn0gc2V0dXAucHkgLS13aXRoLWxpYnlhbWwgaW5zdGFsbCAke1BBUkFNRVRFUlN9CisKK3Rlc3Q6IGJ1aWxkCisJJHtQWVRIT059IHRlc3RzL2xpYi90ZXN0X2J1aWxkLnB5ICR7VEVTVH0KKwordGVzdGV4dDogYnVpbGRleHQKKwkke1BZVEhPTn0gdGVzdHMvbGliL3Rlc3RfYnVpbGRfZXh0LnB5ICR7VEVTVH0KKwordGVzdGFsbDoKKwkke1BZVEhPTn0gc2V0dXAucHkgdGVzdAorCitkaXN0OgorCUAjIE5vIGxvbmdlciB1cGxvYWRpbmcgYSB6aXAgZmlsZSB0byBweXBpCisJQCMgJHtQWVRIT059IHNldHVwLnB5IC0td2l0aC1saWJ5YW1sIHNkaXN0IC0tZm9ybWF0cz16aXAsZ3p0YXIKKwkke1BZVEhPTn0gc2V0dXAucHkgLS13aXRoLWxpYnlhbWwgc2Rpc3QgLS1mb3JtYXRzPWd6dGFyCisKK3dpbmRpc3Q6CisJJHtQWVRIT059IHNldHVwLnB5IC0td2l0aC1saWJ5YW1sIGJkaXN0X3dpbmluc3QKKworY2xlYW46CisJJHtQWVRIT059IHNldHVwLnB5IC0td2l0aC1saWJ5YW1sIGNsZWFuIC1hCisJcm0gLWZyIFwKKwkgICAgZGlzdC8gXAorCSAgICBsaWIvUHlZQU1MLmVnZy1pbmZvLyBcCisJICAgIGxpYi95YW1sL19fcHljYWNoZV9fLyBcCisJICAgIHRlc3RzL2xpYi9fX3B5Y2FjaGVfXy8gXAorCSAgICB5YW1sL195YW1sLmMgXAorCmRpZmYgLS1naXQgYS9OT1RJQ0UgYi9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxYjhlMQotLS0gL2Rldi9udWxsCisrKyBiL05PVElDRQpAQCAtMCwwICsxLDIwIEBACitDb3B5cmlnaHQgKGMpIDIwMTctMjAyMSBJbmd5IGTDtnQgTmV0CitDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNiBLaXJpbGwgU2ltb25vdgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCitTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL09XTkVSUyBiL09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWJiZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvT1dORVJTCkBAIC0wLDAgKzEsOSBAQAorIyBBbmRyb2lkIHNpZGUgZW5ncHJvZCB0ZWFtCitqZGVzcHJlekBnb29nbGUuY29tCitmcmFua2ZlbmdAZ29vZ2xlLmNvbQorbXVyakBnb29nbGUuY29tCisKKyMgTW9ibHkgdGVhbSAtIHVzZSBmb3IgbW9ibHkgYnVncworYW5nbGlAZ29vZ2xlLmNvbQorbGFuY2VmbHVnZXJAZ29vZ2xlLmNvbQorCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwMWRhMgotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5tZApAQCAtMCwwICsxLDUzIEBACitQeVlBTUwKKz09PT09PQorCitBIGZ1bGwtZmVhdHVyZWQgWUFNTCBwcm9jZXNzaW5nIGZyYW1ld29yayBmb3IgUHl0aG9uCisKKyMjIEluc3RhbGxhdGlvbgorCitUbyBpbnN0YWxsLCB0eXBlIGBweXRob24gc2V0dXAucHkgaW5zdGFsbGAuCisKK0J5IGRlZmF1bHQsIHRoZSBgc2V0dXAucHlgIHNjcmlwdCBjaGVja3Mgd2hldGhlciBMaWJZQU1MIGlzIGluc3RhbGxlZCBhbmQgaWYKK3NvLCBidWlsZHMgYW5kIGluc3RhbGxzIExpYllBTUwgYmluZGluZ3MuCitUbyBza2lwIHRoZSBjaGVjayBhbmQgZm9yY2UgaW5zdGFsbGF0aW9uIG9mIExpYllBTUwgYmluZGluZ3MsIHVzZSB0aGUgb3B0aW9uCitgLS13aXRoLWxpYnlhbWxgOiBgcHl0aG9uIHNldHVwLnB5IC0td2l0aC1saWJ5YW1sIGluc3RhbGxgLgorVG8gZGlzYWJsZSB0aGUgY2hlY2sgYW5kIHNraXAgYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgTGliWUFNTCBiaW5kaW5ncywgdXNlCitgLS13aXRob3V0LWxpYnlhbWxgOiBgcHl0aG9uIHNldHVwLnB5IC0td2l0aG91dC1saWJ5YW1sIGluc3RhbGxgLgorCitXaGVuIExpYllBTUwgYmluZGluZ3MgYXJlIGluc3RhbGxlZCwgeW91IG1heSB1c2UgZmFzdCBMaWJZQU1MLWJhc2VkIHBhcnNlciBhbmQKK2VtaXR0ZXIgYXMgZm9sbG93czoKKworICAgID4+PiB5YW1sLmxvYWQoc3RyZWFtLCBMb2FkZXI9eWFtbC5DTG9hZGVyKQorICAgID4+PiB5YW1sLmR1bXAoZGF0YSwgRHVtcGVyPXlhbWwuQ0R1bXBlcikKKworSWYgeW91IGRvbid0IHRydXN0IHRoZSBpbnB1dCBZQU1MIHN0cmVhbSwgeW91IHNob3VsZCB1c2U6CisKKyAgICA+Pj4geWFtbC5zYWZlX2xvYWQoc3RyZWFtKQorCisjIyBUZXN0aW5nCisKK1B5WUFNTCBpbmNsdWRlcyBhIGNvbXByZWhlbnNpdmUgdGVzdCBzdWl0ZS4KK1RvIHJ1biB0aGUgdGVzdHMsIHR5cGUgYHB5dGhvbiBzZXR1cC5weSB0ZXN0YC4KKworIyMgRnVydGhlciBJbmZvcm1hdGlvbgorCisqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjaGVjayB0aGUKKyAgW1B5WUFNTCBob21lcGFnZV0oaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sKS4KKworKiBbUHlZQU1MIHR1dG9yaWFsIGFuZCByZWZlcmVuY2VdKGh0dHA6Ly9weXlhbWwub3JnL3dpa2kvUHlZQU1MRG9jdW1lbnRhdGlvbikuCisKKyogRGlzY3VzcyBQeVlBTUwgd2l0aCB0aGUgbWFpbnRhaW5lcnMgb24KKyAgTWF0cml4IGF0IGh0dHBzOi8vbWF0cml4LnRvLyMvI3B5eWFtbDp5YW1sLmlvIG9yCisgIElSQyAjcHl5YW1sIGlyYy5saWJlcmEuY2hhdAorCisqIFN1Ym1pdCBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cyB0byB0aGUKKyAgW1B5WUFNTCBidWcgdHJhY2tlcl0oaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL2lzc3VlcykuCisKKyMjIExpY2Vuc2UKKworVGhlIFB5WUFNTCBtb2R1bGUgd2FzIHdyaXR0ZW4gYnkgS2lyaWxsIFNpbW9ub3YgPHhpQHJlc29sdmVudC5uZXQ+LgorSXQgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgdGhlIFlBTUwgYW5kIFB5dGhvbiBjb21tdW5pdGllcy4KKworUHlZQU1MIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KKworU2VlIHRoZSBmaWxlIExJQ0VOU0UgZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL2Fubm91bmNlbWVudC5tc2cgYi9hbm5vdW5jZW1lbnQubXNnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzFiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hbm5vdW5jZW1lbnQubXNnCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tOiBJbmd5IGTDtnQgTmV0IDxpbmd5QGluZ3kubmV0PgorVG86IHB5dGhvbi1saXN0QHB5dGhvbi5vcmcsIHB5dGhvbi1hbm5vdW5jZUBweXRob24ub3JnLCB5YW1sLWNvcmVAbGlzdHMuc291cmNlZm9yZ2UubmV0CitTdWJqZWN0OiBbQU5OXSBQeVlBTUwtNi4wIFJlbGVhc2VkCisKKz09PT09PT09PT09PT09PT09PT09PQorQW5ub3VuY2luZyBQeVlBTUwtNi4wCis9PT09PT09PT09PT09PT09PT09PT0KKworQSBuZXcgcmVsZWFzZSBvZiBQeVlBTUwgaXMgbm93IGF2YWlsYWJsZToKK2h0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9yZWxlYXNlcy90YWcvNi4wCisKK1RoZSBwcmV2aW91c2x5LWRlcHJlY2F0ZWQgZGVmYXVsdCBsb2FkZXIgc2VsZWN0aW9uIGluIGB5YW1sLmxvYWQoKWAgaGFzCitiZWVuIHJlbW92ZWQ7IGBMb2FkZXJgIGlzIG5vdyBhIHJlcXVpcmVkIGFyZ3VtZW50LgorCitTdXBwb3J0IGZvciBQeXRob24gMi43IGFuZCAzLjUgaGFzIGJlZW4gZHJvcHBlZCwgYW5kIHN1cHBvcnQgZm9yIFB5dGhvbiAzLjEwCithZGRlZC4gSXQgbm93IGluY2x1ZGVzIGxpYnlhbWwgMC4yLjUgZXh0ZW5zaW9uIHdoZWVscyBmb3IgTWFjT1MgTTEKKyhBcHBsZSBTaWxpY29uL2FybTY0KSwgTGludXggczM5MHggYW5kIExpbnV4IGFhcmNoNjQuCisKK051bWVyb3VzIG90aGVyIGJ1Z2ZpeGVzIGFuZCBjb2RlIGNsZWFudXBzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuCisKKworQ2hhbmdlcworPT09PT09PQorCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzMyNyAtLSBDaGFuZ2UgUkVBRE1FIGZvcm1hdCB0byBNYXJrZG93bgorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC80ODMgLS0gQWRkIGEgdGVzdCBmb3IgWUFNTCAxLjEgdHlwZXMKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNDk3IC0tIGZpeCBmbG9hdCByZXNvbHZlciB0byBpZ25vcmUgYC5gIGFuZCBgLl9gCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzU1MCAtLSBkcm9wIFB5dGhvbiAyLjcKKyogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL3B1bGwvNTUzIC0tIEZpeCBzcGVsbGluZyBvZiDigJxoZXhhZGVjaW1hbOKAnQorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC81NTYgLS0gZml4IHJlcHJlc2VudGF0aW9uIG9mIEVudW0gc3ViY2xhc3NlcworKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC81NTcgLS0gZml4IGxpYnlhbWwgZXh0ZW5zaW9uIGNvbXBpbGVyIHdhcm5pbmdzCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzU2MCAtLSBmaXggUmVzb3VyY2VXYXJuaW5nIG9uIGxlYWtlZCBmaWxlIGRlc2NyaXB0b3JzCisqIGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxsLzU2MSAtLSBhbHdheXMgcmVxdWlyZSBgTG9hZGVyYCBhcmcgdG8gYHlhbWwubG9hZCgpYAorKiBodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwvcHVsbC81NjQgLS0gcmVtb3ZlIHJlbWFpbmluZyBkaXJlY3QgZGlzdHV0aWxzIHVzYWdlCisKKworUmVzb3VyY2VzCis9PT09PT09PT0KKworUHlZQU1MIE1hdHJpeDogaHR0cHM6Ly9tYXRyaXgudG8vIy8jcHl5YW1sOnlhbWwuaW8KK1B5WUFNTCBJUkMgQ2hhbm5lbDogI3B5eWFtbCBvbiBpcmMubGliZXJhLmNoYXQKK1B5WUFNTCBob21lcGFnZTogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sCitQeVlBTUwgZG9jdW1lbnRhdGlvbjogaHR0cDovL3B5eWFtbC5vcmcvd2lraS9QeVlBTUxEb2N1bWVudGF0aW9uCitTb3VyY2UgYW5kIGJpbmFyeSBpbnN0YWxsZXJzOiBodHRwczovL3B5cGkub3JnL3Byb2plY3QvUHlZQU1MLworR2l0SHViIHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC8KK0J1ZyB0cmFja2luZzogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL2lzc3VlcworCitZQU1MIGhvbWVwYWdlOiBodHRwOi8veWFtbC5vcmcvCitZQU1MLWNvcmUgbWFpbGluZyBsaXN0OiBodHRwOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3lhbWwtY29yZQorCisKK0Fib3V0IFB5WUFNTAorPT09PT09PT09PT09CisKK1lBTUwgaXMgYSBkYXRhIHNlcmlhbGl6YXRpb24gZm9ybWF0IGRlc2lnbmVkIGZvciBodW1hbiByZWFkYWJpbGl0eSBhbmQKK2ludGVyYWN0aW9uIHdpdGggc2NyaXB0aW5nIGxhbmd1YWdlcy4gUHlZQU1MIGlzIGEgWUFNTCBwYXJzZXIgYW5kIGVtaXR0ZXIgZm9yCitQeXRob24uCisKK1B5WUFNTCBmZWF0dXJlcyBhIGNvbXBsZXRlIFlBTUwgMS4xIHBhcnNlciwgVW5pY29kZSBzdXBwb3J0LCBwaWNrbGUgc3VwcG9ydCwKK2NhcGFibGUgZXh0ZW5zaW9uIEFQSSwgYW5kIHNlbnNpYmxlIGVycm9yIG1lc3NhZ2VzLiBQeVlBTUwgc3VwcG9ydHMgc3RhbmRhcmQKK1lBTUwgdGFncyBhbmQgcHJvdmlkZXMgUHl0aG9uLXNwZWNpZmljIHRhZ3MgdGhhdCBhbGxvdyB0byByZXByZXNlbnQgYW4KK2FyYml0cmFyeSBQeXRob24gb2JqZWN0LgorCitQeVlBTUwgaXMgYXBwbGljYWJsZSBmb3IgYSBicm9hZCByYW5nZSBvZiB0YXNrcyBmcm9tIGNvbXBsZXggY29uZmlndXJhdGlvbgorZmlsZXMgdG8gb2JqZWN0IHNlcmlhbGl6YXRpb24gYW5kIHBlcnNpc3RlbmNlLgorCisKK0V4YW1wbGUKKz09PT09PT0KKworYGBgCis+Pj4gaW1wb3J0IHlhbWwKKworPj4+IHlhbWwuZnVsbF9sb2FkKCIiIgorLi4uIG5hbWU6IFB5WUFNTAorLi4uIGRlc2NyaXB0aW9uOiBZQU1MIHBhcnNlciBhbmQgZW1pdHRlciBmb3IgUHl0aG9uCisuLi4gaG9tZXBhZ2U6IGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbAorLi4uIGtleXdvcmRzOiBbWUFNTCwgc2VyaWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgcGVyc2lzdGVuY2UsIHBpY2tsZV0KKy4uLiAiIiIpCit7J2tleXdvcmRzJzogWydZQU1MJywgJ3NlcmlhbGl6YXRpb24nLCAnY29uZmlndXJhdGlvbicsICdwZXJzaXN0ZW5jZScsCisncGlja2xlJ10sICdob21lcGFnZSc6ICdodHRwczovL2dpdGh1Yi5jb20veWFtbC9weXlhbWwnLCAnZGVzY3JpcHRpb24nOgorJ1lBTUwgcGFyc2VyIGFuZCBlbWl0dGVyIGZvciBQeXRob24nLCAnbmFtZSc6ICdQeVlBTUwnfQorCis+Pj4gcHJpbnQoeWFtbC5kdW1wKF8pKQorbmFtZTogUHlZQU1MCitob21lcGFnZTogaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sCitkZXNjcmlwdGlvbjogWUFNTCBwYXJzZXIgYW5kIGVtaXR0ZXIgZm9yIFB5dGhvbgora2V5d29yZHM6IFtZQU1MLCBzZXJpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBwZXJzaXN0ZW5jZSwgcGlja2xlXQorYGBgCisKK01haW50YWluZXJzCis9PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIHBlb3BsZSBhcmUgY3VycmVudGx5IHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyBQeVlBTUw6CisKKyogSW5neSBkw7Z0IE5ldAorKiBNYXR0IERhdmlzCisKK2FuZCBtYW55IHRoYW5rcyB0byBhbGwgd2hvIGhhdmUgY29udHJpYnV0ZWQhCitTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9wdWxscworCisKK0NvcHlyaWdodAorPT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAxNy0yMDIxIEluZ3kgZMO2dCBOZXQgPGluZ3lAaW5neS5uZXQ+CitDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNiBLaXJpbGwgU2ltb25vdiA8eGlAcmVzb2x2ZW50Lm5ldD4KKworVGhlIFB5WUFNTCBtb2R1bGUgd2FzIHdyaXR0ZW4gYnkgS2lyaWxsIFNpbW9ub3YgPHhpQHJlc29sdmVudC5uZXQ+LgorSXQgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgdGhlIFlBTUwgYW5kIFB5dGhvbiBjb21tdW5pdGllcy4KKworUHlZQU1MIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KK1NlZSB0aGUgZmlsZSBMSUNFTlNFIGZvciBtb3JlIGRldGFpbHMuCmRpZmYgLS1naXQgYS9leGFtcGxlcy9weWdtZW50cy1sZXhlci9leGFtcGxlLnlhbWwgYi9leGFtcGxlcy9weWdtZW50cy1sZXhlci9leGFtcGxlLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMwZWQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3B5Z21lbnRzLWxleGVyL2V4YW1wbGUueWFtbApAQCAtMCwwICsxLDMwMiBAQAorCisjCisjIEV4YW1wbGVzIGZyb20gdGhlIFByZXZpZXcgc2VjdGlvbiBvZiB0aGUgWUFNTCBzcGVjaWZpY2F0aW9uCisjIChodHRwOi8veWFtbC5vcmcvc3BlYy8xLjIvI1ByZXZpZXcpCisjCisKKyMgU2VxdWVuY2Ugb2Ygc2NhbGFycworLS0tCistIE1hcmsgTWNHd2lyZQorLSBTYW1teSBTb3NhCistIEtlbiBHcmlmZmV5CisKKyMgTWFwcGluZyBzY2FsYXJzIHRvIHNjYWxhcnMKKy0tLQoraHI6ICA2NSAgICAjIEhvbWUgcnVucworYXZnOiAwLjI3OCAjIEJhdHRpbmcgYXZlcmFnZQorcmJpOiAxNDcgICAjIFJ1bnMgQmF0dGVkIEluCisKKyMgTWFwcGluZyBzY2FsYXJzIHRvIHNlcXVlbmNlcworLS0tCithbWVyaWNhbjoKKyAgLSBCb3N0b24gUmVkIFNveAorICAtIERldHJvaXQgVGlnZXJzCisgIC0gTmV3IFlvcmsgWWFua2VlcworbmF0aW9uYWw6CisgIC0gTmV3IFlvcmsgTWV0cworICAtIENoaWNhZ28gQ3VicworICAtIEF0bGFudGEgQnJhdmVzCisKKyMgU2VxdWVuY2Ugb2YgbWFwcGluZ3MKKy0tLQorLQorICBuYW1lOiBNYXJrIE1jR3dpcmUKKyAgaHI6ICAgNjUKKyAgYXZnOiAgMC4yNzgKKy0KKyAgbmFtZTogU2FtbXkgU29zYQorICBocjogICA2MworICBhdmc6ICAwLjI4OAorCisjIFNlcXVlbmNlIG9mIHNlcXVlbmNlcworLS0tCistIFtuYW1lICAgICAgICAsIGhyLCBhdmcgIF0KKy0gW01hcmsgTWNHd2lyZSwgNjUsIDAuMjc4XQorLSBbU2FtbXkgU29zYSAgLCA2MywgMC4yODhdCisKKyMgTWFwcGluZyBvZiBtYXBwaW5ncworLS0tCitNYXJrIE1jR3dpcmU6IHtocjogNjUsIGF2ZzogMC4yNzh9CitTYW1teSBTb3NhOiB7CisgICAgaHI6IDYzLAorICAgIGF2ZzogMC4yODgKKyAgfQorCisjIFR3byBkb2N1bWVudHMgaW4gYSBzdHJlYW0KKy0tLSAjIFJhbmtpbmcgb2YgMTk5OCBob21lIHJ1bnMKKy0gTWFyayBNY0d3aXJlCistIFNhbW15IFNvc2EKKy0gS2VuIEdyaWZmZXkKKy0tLSAjIFRlYW0gcmFua2luZworLSBDaGljYWdvIEN1YnMKKy0gU3QgTG91aXMgQ2FyZGluYWxzCisKKyMgRG9jdW1lbnRzIHdpdGggdGhlIGVuZCBpbmRpY2F0b3IKKy0tLQordGltZTogMjA6MDM6MjAKK3BsYXllcjogU2FtbXkgU29zYQorYWN0aW9uOiBzdHJpa2UgKG1pc3MpCisuLi4KKy0tLQordGltZTogMjA6MDM6NDcKK3BsYXllcjogU2FtbXkgU29zYQorYWN0aW9uOiBncmFuZCBzbGFtCisuLi4KKworIyBDb21tZW50cworLS0tCitocjogIyAxOTk4IGhyIHJhbmtpbmcKKyAgLSBNYXJrIE1jR3dpcmUKKyAgLSBTYW1teSBTb3NhCityYmk6CisgICMgMTk5OCByYmkgcmFua2luZworICAtIFNhbW15IFNvc2EKKyAgLSBLZW4gR3JpZmZleQorCisjIEFuY2hvcnMgYW5kIGFsaWFzZXMKKy0tLQoraHI6CisgIC0gTWFyayBNY0d3aXJlCisgICMgRm9sbG93aW5nIG5vZGUgbGFiZWxlZCBTUworICAtICZTUyBTYW1teSBTb3NhCityYmk6CisgIC0gKlNTICMgU3Vic2VxdWVudCBvY2N1cnJlbmNlCisgIC0gS2VuIEdyaWZmZXkKKworIyBNYXBwaW5nIGJldHdlZW4gc2VxdWVuY2VzCistLS0KKz8gLSBEZXRyb2l0IFRpZ2VycworICAtIENoaWNhZ28gY3VicworOgorICAtIDIwMDEtMDctMjMKKz8gWyBOZXcgWW9yayBZYW5rZWVzLAorICAgIEF0bGFudGEgQnJhdmVzIF0KKzogWyAyMDAxLTA3LTAyLCAyMDAxLTA4LTEyLAorICAgIDIwMDEtMDgtMTQgXQorCisjIElubGluZSBuZXN0ZWQgbWFwcGluZworLS0tCisjIHByb2R1Y3RzIHB1cmNoYXNlZAorLSBpdGVtICAgIDogU3VwZXIgSG9vcAorICBxdWFudGl0eTogMQorLSBpdGVtICAgIDogQmFza2V0YmFsbAorICBxdWFudGl0eTogNAorLSBpdGVtICAgIDogQmlnIFNob2VzCisgIHF1YW50aXR5OiAxCisKKyMgTGl0ZXJhbCBzY2FsYXJzCistLS0gfCAjIEFTQ0lJIGFydAorICBcLy98fFwvfHwKKyAgLy8gfHwgIHx8X18KKworIyBGb2xkZWQgc2NhbGFycworLS0tID4KKyAgTWFyayBNY0d3aXJlJ3MKKyAgeWVhciB3YXMgY3JpcHBsZWQKKyAgYnkgYSBrbmVlIGluanVyeS4KKworIyBQcmVzZXJ2ZWQgaW5kZW50ZWQgYmxvY2sgaW4gYSBmb2xkZWQgc2NhbGFyCistLS0KKz4KKyBTYW1teSBTb3NhIGNvbXBsZXRlZCBhbm90aGVyCisgZmluZSBzZWFzb24gd2l0aCBncmVhdCBzdGF0cy4KKworICAgNjMgSG9tZSBSdW5zCisgICAwLjI4OCBCYXR0aW5nIEF2ZXJhZ2UKKworIFdoYXQgYSB5ZWFyIQorCisjIEluZGVudGF0aW9uIGRldGVybWluZXMgc2NvcGUKKy0tLQorbmFtZTogTWFyayBNY0d3aXJlCithY2NvbXBsaXNobWVudDogPgorICBNYXJrIHNldCBhIG1ham9yIGxlYWd1ZQorICBob21lIHJ1biByZWNvcmQgaW4gMTk5OC4KK3N0YXRzOiB8CisgIDY1IEhvbWUgUnVucworICAwLjI3OCBCYXR0aW5nIEF2ZXJhZ2UKKworIyBRdW90ZWQgc2NhbGFycworLS0tCit1bmljb2RlOiAiU29zYSBkaWQgZmluZS5cdTI2M0EiCitjb250cm9sOiAiXGIxOTk4XHQxOTk5XHQyMDAwXG4iCitoZXggZXNjOiAiXHgwZFx4MGEgaXMgXHJcbiIKK3NpbmdsZTogJyJIb3dkeSEiIGhlIGNyaWVkLicKK3F1b3RlZDogJyAjIG5vdCBhICcnY29tbWVudCcnLicKK3RpZS1maWdodGVyOiAnfFwtKi0vfCcKKworIyBNdWx0aS1saW5lIGZsb3cgc2NhbGFycworLS0tCitwbGFpbjoKKyAgVGhpcyB1bnF1b3RlZCBzY2FsYXIKKyAgc3BhbnMgbWFueSBsaW5lcy4KK3F1b3RlZDogIlNvIGRvZXMgdGhpcworICBxdW90ZWQgc2NhbGFyLlxuIgorCisjIEludGVnZXJzCistLS0KK2Nhbm9uaWNhbDogMTIzNDUKK2RlY2ltYWw6ICsxMl8zNDUKK3NleGFnZXNpbWFsOiAzOjI1OjQ1CitvY3RhbDogMDE0CitoZXhhZGVjaW1hbDogMHhDCisKKyMgRmxvYXRpbmcgcG9pbnQKKy0tLQorY2Fub25pY2FsOiAxLjIzMDE1ZSszCitleHBvbmVudGlhbDogMTIuMzAxNWUrMDIKK3NleGFnZXNpbWFsOiAyMDozMC4xNQorZml4ZWQ6IDFfMjMwLjE1CituZWdhdGl2ZSBpbmZpbml0eTogLS5pbmYKK25vdCBhIG51bWJlcjogLk5hTgorCisjIE1pc2NlbGxhbmVvdXMKKy0tLQorbnVsbDogfgordHJ1ZTogYm9vbGVhbgorZmFsc2U6IGJvb2xlYW4KK3N0cmluZzogJzEyMzQ1JworCisjIFRpbWVzdGFtcHMKKy0tLQorY2Fub25pY2FsOiAyMDAxLTEyLTE1VDAyOjU5OjQzLjFaCitpc284NjAxOiAyMDAxLTEyLTE0dDIxOjU5OjQzLjEwLTA1OjAwCitzcGFjZWQ6IDIwMDEtMTItMTQgMjE6NTk6NDMuMTAgLTUKK2RhdGU6IDIwMDItMTItMTQKKworIyBWYXJpb3VzIGV4cGxpY2l0IHRhZ3MKKy0tLQorbm90LWRhdGU6ICEhc3RyIDIwMDItMDQtMjgKK3BpY3R1cmU6ICEhYmluYXJ5IHwKKyBSMGxHT0RsaERBQU1BSVFBQVAvLzkvWAorIDE3dW5wNVdabVpnQUFBT2ZuNTE1ZVh2CisgUHo3WTZPanVEZzRKK2ZuNU9UazZlbnAKKyA1NmVubWxlRUNjZ2dnb0JBRHM9CithcHBsaWNhdGlvbiBzcGVjaWZpYyB0YWc6ICFzb21ldGhpbmcgfAorIFRoZSBzZW1hbnRpY3Mgb2YgdGhlIHRhZworIGFib3ZlIG1heSBiZSBkaWZmZXJlbnQgZm9yCisgZGlmZmVyZW50IGRvY3VtZW50cy4KKworIyBHbG9iYWwgdGFncworJVRBRyAhIHRhZzpjbGFya2V2YW5zLmNvbSwyMDAyOgorLS0tICFzaGFwZQorICAjIFVzZSB0aGUgISBoYW5kbGUgZm9yIHByZXNlbnRpbmcKKyAgIyB0YWc6Y2xhcmtldmFucy5jb20sMjAwMjpjaXJjbGUKKy0gIWNpcmNsZQorICBjZW50ZXI6ICZPUklHSU4ge3g6IDczLCB5OiAxMjl9CisgIHJhZGl1czogNworLSAhbGluZQorICBzdGFydDogKk9SSUdJTgorICBmaW5pc2g6IHsgeDogODksIHk6IDEwMiB9CistICFsYWJlbAorICBzdGFydDogKk9SSUdJTgorICBjb2xvcjogMHhGRkVFQkIKKyAgdGV4dDogUHJldHR5IHZlY3RvciBkcmF3aW5nLgorCisjIFVub3JkZXJlZCBzZXRzCistLS0gISFzZXQKKyMgc2V0cyBhcmUgcmVwcmVzZW50ZWQgYXMgYQorIyBtYXBwaW5nIHdoZXJlIGVhY2gga2V5IGlzCisjIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW1wdHkgc3RyaW5nCis/IE1hcmsgTWNHd2lyZQorPyBTYW1teSBTb3NhCis/IEtlbiBHcmlmZgorCisjIE9yZGVyZWQgbWFwcGluZ3MKKy0tLSAhIW9tYXAKKyMgb3JkZXJlZCBtYXBzIGFyZSByZXByZXNlbnRlZCBhcworIyBhIHNlcXVlbmNlIG9mIG1hcHBpbmdzLCB3aXRoCisjIGVhY2ggbWFwcGluZyBoYXZpbmcgb25lIGtleQorLSBNYXJrIE1jR3dpcmU6IDY1CistIFNhbW15IFNvc2E6IDYzCistIEtlbiBHcmlmZnk6IDU4CisKKyMgRnVsbCBsZW5ndGggZXhhbXBsZQorLS0tICE8dGFnOmNsYXJrZXZhbnMuY29tLDIwMDI6aW52b2ljZT4KK2ludm9pY2U6IDM0ODQzCitkYXRlICAgOiAyMDAxLTAxLTIzCitiaWxsLXRvOiAmaWQwMDEKKyAgICBnaXZlbiAgOiBDaHJpcworICAgIGZhbWlseSA6IER1bWFycworICAgIGFkZHJlc3M6CisgICAgICAgIGxpbmVzOiB8CisgICAgICAgICAgICA0NTggV2Fsa21hbiBEci4KKyAgICAgICAgICAgIFN1aXRlICMyOTIKKyAgICAgICAgY2l0eSAgICA6IFJveWFsIE9haworICAgICAgICBzdGF0ZSAgIDogTUkKKyAgICAgICAgcG9zdGFsICA6IDQ4MDQ2CitzaGlwLXRvOiAqaWQwMDEKK3Byb2R1Y3Q6CisgICAgLSBza3UgICAgICAgICA6IEJMMzk0RAorICAgICAgcXVhbnRpdHkgICAgOiA0CisgICAgICBkZXNjcmlwdGlvbiA6IEJhc2tldGJhbGwKKyAgICAgIHByaWNlICAgICAgIDogNDUwLjAwCisgICAgLSBza3UgICAgICAgICA6IEJMNDQzOEgKKyAgICAgIHF1YW50aXR5ICAgIDogMQorICAgICAgZGVzY3JpcHRpb24gOiBTdXBlciBIb29wCisgICAgICBwcmljZSAgICAgICA6IDIzOTIuMDAKK3RheCAgOiAyNTEuNDIKK3RvdGFsOiA0NDQzLjUyCitjb21tZW50czoKKyAgICBMYXRlIGFmdGVybm9vbiBpcyBiZXN0LgorICAgIEJhY2t1cCBjb250YWN0IGlzIE5hbmN5CisgICAgQmlsbHNtZXIgQCAzMzgtNDMzOC4KKworIyBBbm90aGVyIGZ1bGwtbGVuZ3RoIGV4YW1wbGUKKy0tLQorVGltZTogMjAwMS0xMS0yMyAxNTowMTo0MiAtNQorVXNlcjogZWQKK1dhcm5pbmc6CisgIFRoaXMgaXMgYW4gZXJyb3IgbWVzc2FnZQorICBmb3IgdGhlIGxvZyBmaWxlCistLS0KK1RpbWU6IDIwMDEtMTEtMjMgMTU6MDI6MzEgLTUKK1VzZXI6IGVkCitXYXJuaW5nOgorICBBIHNsaWdodGx5IGRpZmZlcmVudCBlcnJvcgorICBtZXNzYWdlLgorLS0tCitEYXRlOiAyMDAxLTExLTIzIDE1OjAzOjE3IC01CitVc2VyOiBlZAorRmF0YWw6CisgIFVua25vd24gdmFyaWFibGUgImJhciIKK1N0YWNrOgorICAtIGZpbGU6IFRvcENsYXNzLnB5CisgICAgbGluZTogMjMKKyAgICBjb2RlOiB8CisgICAgICB4ID0gTW9yZU9iamVjdCgiMzQ1XG4iKQorICAtIGZpbGU6IE1vcmVDbGFzcy5weQorICAgIGxpbmU6IDU4CisgICAgY29kZTogfC0KKyAgICAgIGZvbyA9IGJhcgorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9weWdtZW50cy1sZXhlci95YW1sLnB5IGIvZXhhbXBsZXMvcHlnbWVudHMtbGV4ZXIveWFtbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFiYmRlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcHlnbWVudHMtbGV4ZXIveWFtbC5weQpAQCAtMCwwICsxLDQzMSBAQAorCisiIiIKK3lhbWwucHkKKworTGV4ZXIgZm9yIFlBTUwsIGEgaHVtYW4tZnJpZW5kbHkgZGF0YSBzZXJpYWxpemF0aW9uIGxhbmd1YWdlCisoaHR0cDovL3lhbWwub3JnLykuCisKK1dyaXR0ZW4gYnkgS2lyaWxsIFNpbW9ub3YgPHhpQHJlc29sdmVudC5uZXQ+LgorCitMaWNlbnNlOiBXaGF0ZXZlciBzdWl0YWJsZSBmb3IgaW5jbHVzaW9uIGludG8gdGhlIFB5Z21lbnRzIHBhY2thZ2UuCisiIiIKKworZnJvbSBweWdtZW50cy5sZXhlciBpbXBvcnQgIFwKKyAgICAgICAgRXh0ZW5kZWRSZWdleExleGVyLCBMZXhlckNvbnRleHQsIGluY2x1ZGUsIGJ5Z3JvdXBzCitmcm9tIHB5Z21lbnRzLnRva2VuIGltcG9ydCAgXAorICAgICAgICBUZXh0LCBDb21tZW50LCBQdW5jdHVhdGlvbiwgTmFtZSwgTGl0ZXJhbAorCitfX2FsbF9fID0gWydZQU1MTGV4ZXInXQorCisKK2NsYXNzIFlBTUxMZXhlckNvbnRleHQoTGV4ZXJDb250ZXh0KToKKyAgICAiIiJJbmRlbnRhdGlvbiBjb250ZXh0IGZvciB0aGUgWUFNTCBsZXhlci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgc3VwZXIoWUFNTExleGVyQ29udGV4dCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dkcykKKyAgICAgICAgc2VsZi5pbmRlbnRfc3RhY2sgPSBbXQorICAgICAgICBzZWxmLmluZGVudCA9IC0xCisgICAgICAgIHNlbGYubmV4dF9pbmRlbnQgPSAwCisgICAgICAgIHNlbGYuYmxvY2tfc2NhbGFyX2luZGVudCA9IE5vbmUKKworCitkZWYgc29tZXRoaW5nKFRva2VuQ2xhc3MpOgorICAgICIiIkRvIG5vdCBwcm9kdWNlIGVtcHR5IHRva2Vucy4iIiIKKyAgICBkZWYgY2FsbGJhY2sobGV4ZXIsIG1hdGNoLCBjb250ZXh0KToKKyAgICAgICAgdGV4dCA9IG1hdGNoLmdyb3VwKCkKKyAgICAgICAgaWYgbm90IHRleHQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgeWllbGQgbWF0Y2guc3RhcnQoKSwgVG9rZW5DbGFzcywgdGV4dAorICAgICAgICBjb250ZXh0LnBvcyA9IG1hdGNoLmVuZCgpCisgICAgcmV0dXJuIGNhbGxiYWNrCisKK2RlZiByZXNldF9pbmRlbnQoVG9rZW5DbGFzcyk6CisgICAgIiIiUmVzZXQgdGhlIGluZGVudGF0aW9uIGxldmVscy4iIiIKKyAgICBkZWYgY2FsbGJhY2sobGV4ZXIsIG1hdGNoLCBjb250ZXh0KToKKyAgICAgICAgdGV4dCA9IG1hdGNoLmdyb3VwKCkKKyAgICAgICAgY29udGV4dC5pbmRlbnRfc3RhY2sgPSBbXQorICAgICAgICBjb250ZXh0LmluZGVudCA9IC0xCisgICAgICAgIGNvbnRleHQubmV4dF9pbmRlbnQgPSAwCisgICAgICAgIGNvbnRleHQuYmxvY2tfc2NhbGFyX2luZGVudCA9IE5vbmUKKyAgICAgICAgeWllbGQgbWF0Y2guc3RhcnQoKSwgVG9rZW5DbGFzcywgdGV4dAorICAgICAgICBjb250ZXh0LnBvcyA9IG1hdGNoLmVuZCgpCisgICAgcmV0dXJuIGNhbGxiYWNrCisKK2RlZiBzYXZlX2luZGVudChUb2tlbkNsYXNzLCBzdGFydD1GYWxzZSk6CisgICAgIiIiU2F2ZSBhIHBvc3NpYmxlIGluZGVudGF0aW9uIGxldmVsLiIiIgorICAgIGRlZiBjYWxsYmFjayhsZXhlciwgbWF0Y2gsIGNvbnRleHQpOgorICAgICAgICB0ZXh0ID0gbWF0Y2guZ3JvdXAoKQorICAgICAgICBleHRyYSA9ICcnCisgICAgICAgIGlmIHN0YXJ0OgorICAgICAgICAgICAgY29udGV4dC5uZXh0X2luZGVudCA9IGxlbih0ZXh0KQorICAgICAgICAgICAgaWYgY29udGV4dC5uZXh0X2luZGVudCA8IGNvbnRleHQuaW5kZW50OgorICAgICAgICAgICAgICAgIHdoaWxlIGNvbnRleHQubmV4dF9pbmRlbnQgPCBjb250ZXh0LmluZGVudDoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5pbmRlbnQgPSBjb250ZXh0LmluZGVudF9zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGlmIGNvbnRleHQubmV4dF9pbmRlbnQgPiBjb250ZXh0LmluZGVudDoKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSB0ZXh0W2NvbnRleHQuaW5kZW50Ol0KKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRbOmNvbnRleHQuaW5kZW50XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGV4dC5uZXh0X2luZGVudCArPSBsZW4odGV4dCkKKyAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgIHlpZWxkIG1hdGNoLnN0YXJ0KCksIFRva2VuQ2xhc3MsIHRleHQKKyAgICAgICAgaWYgZXh0cmE6CisgICAgICAgICAgICB5aWVsZCBtYXRjaC5zdGFydCgpK2xlbih0ZXh0KSwgVG9rZW5DbGFzcy5FcnJvciwgZXh0cmEKKyAgICAgICAgY29udGV4dC5wb3MgPSBtYXRjaC5lbmQoKQorICAgIHJldHVybiBjYWxsYmFjaworCitkZWYgc2V0X2luZGVudChUb2tlbkNsYXNzLCBpbXBsaWNpdD1GYWxzZSk6CisgICAgIiIiU2V0IHRoZSBwcmV2aW91c2x5IHNhdmVkIGluZGVudGF0aW9uIGxldmVsLiIiIgorICAgIGRlZiBjYWxsYmFjayhsZXhlciwgbWF0Y2gsIGNvbnRleHQpOgorICAgICAgICB0ZXh0ID0gbWF0Y2guZ3JvdXAoKQorICAgICAgICBpZiBjb250ZXh0LmluZGVudCA8IGNvbnRleHQubmV4dF9pbmRlbnQ6CisgICAgICAgICAgICBjb250ZXh0LmluZGVudF9zdGFjay5hcHBlbmQoY29udGV4dC5pbmRlbnQpCisgICAgICAgICAgICBjb250ZXh0LmluZGVudCA9IGNvbnRleHQubmV4dF9pbmRlbnQKKyAgICAgICAgaWYgbm90IGltcGxpY2l0OgorICAgICAgICAgICAgY29udGV4dC5uZXh0X2luZGVudCArPSBsZW4odGV4dCkKKyAgICAgICAgeWllbGQgbWF0Y2guc3RhcnQoKSwgVG9rZW5DbGFzcywgdGV4dAorICAgICAgICBjb250ZXh0LnBvcyA9IG1hdGNoLmVuZCgpCisgICAgcmV0dXJuIGNhbGxiYWNrCisKK2RlZiBzZXRfYmxvY2tfc2NhbGFyX2luZGVudChUb2tlbkNsYXNzKToKKyAgICAiIiJTZXQgYW4gZXhwbGljaXQgaW5kZW50YXRpb24gbGV2ZWwgZm9yIGEgYmxvY2sgc2NhbGFyLiIiIgorICAgIGRlZiBjYWxsYmFjayhsZXhlciwgbWF0Y2gsIGNvbnRleHQpOgorICAgICAgICB0ZXh0ID0gbWF0Y2guZ3JvdXAoKQorICAgICAgICBjb250ZXh0LmJsb2NrX3NjYWxhcl9pbmRlbnQgPSBOb25lCisgICAgICAgIGlmIG5vdCB0ZXh0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGluY3JlbWVudCA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIGluY3JlbWVudDoKKyAgICAgICAgICAgIGN1cnJlbnRfaW5kZW50ID0gbWF4KGNvbnRleHQuaW5kZW50LCAwKQorICAgICAgICAgICAgaW5jcmVtZW50ID0gaW50KGluY3JlbWVudCkKKyAgICAgICAgICAgIGNvbnRleHQuYmxvY2tfc2NhbGFyX2luZGVudCA9IGN1cnJlbnRfaW5kZW50ICsgaW5jcmVtZW50CisgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICB5aWVsZCBtYXRjaC5zdGFydCgpLCBUb2tlbkNsYXNzLCB0ZXh0CisgICAgICAgICAgICBjb250ZXh0LnBvcyA9IG1hdGNoLmVuZCgpCisgICAgcmV0dXJuIGNhbGxiYWNrCisKK2RlZiBwYXJzZV9ibG9ja19zY2FsYXJfZW1wdHlfbGluZShJbmRlbnRUb2tlbkNsYXNzLCBDb250ZW50VG9rZW5DbGFzcyk6CisgICAgIiIiUHJvY2VzcyBhbiBlbXB0eSBsaW5lIGluIGEgYmxvY2sgc2NhbGFyLiIiIgorICAgIGRlZiBjYWxsYmFjayhsZXhlciwgbWF0Y2gsIGNvbnRleHQpOgorICAgICAgICB0ZXh0ID0gbWF0Y2guZ3JvdXAoKQorICAgICAgICBpZiAoY29udGV4dC5ibG9ja19zY2FsYXJfaW5kZW50IGlzIE5vbmUgb3IKKyAgICAgICAgICAgICAgICBsZW4odGV4dCkgPD0gY29udGV4dC5ibG9ja19zY2FsYXJfaW5kZW50KToKKyAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgeWllbGQgbWF0Y2guc3RhcnQoKSwgSW5kZW50VG9rZW5DbGFzcywgdGV4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5kZW50YXRpb24gPSB0ZXh0Wzpjb250ZXh0LmJsb2NrX3NjYWxhcl9pbmRlbnRdCisgICAgICAgICAgICBjb250ZW50ID0gdGV4dFtjb250ZXh0LmJsb2NrX3NjYWxhcl9pbmRlbnQ6XQorICAgICAgICAgICAgeWllbGQgbWF0Y2guc3RhcnQoKSwgSW5kZW50VG9rZW5DbGFzcywgaW5kZW50YXRpb24KKyAgICAgICAgICAgIHlpZWxkIChtYXRjaC5zdGFydCgpK2NvbnRleHQuYmxvY2tfc2NhbGFyX2luZGVudCwKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudFRva2VuQ2xhc3MsIGNvbnRlbnQpCisgICAgICAgIGNvbnRleHQucG9zID0gbWF0Y2guZW5kKCkKKyAgICByZXR1cm4gY2FsbGJhY2sKKworZGVmIHBhcnNlX2Jsb2NrX3NjYWxhcl9pbmRlbnQoVG9rZW5DbGFzcyk6CisgICAgIiIiUHJvY2VzcyBpbmRlbnRhdGlvbiBzcGFjZXMgaW4gYSBibG9jayBzY2FsYXIuIiIiCisgICAgZGVmIGNhbGxiYWNrKGxleGVyLCBtYXRjaCwgY29udGV4dCk6CisgICAgICAgIHRleHQgPSBtYXRjaC5ncm91cCgpCisgICAgICAgIGlmIGNvbnRleHQuYmxvY2tfc2NhbGFyX2luZGVudCBpcyBOb25lOgorICAgICAgICAgICAgaWYgbGVuKHRleHQpIDw9IG1heChjb250ZXh0LmluZGVudCwgMCk6CisgICAgICAgICAgICAgICAgY29udGV4dC5zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGNvbnRleHQuYmxvY2tfc2NhbGFyX2luZGVudCA9IGxlbih0ZXh0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbGVuKHRleHQpIDwgY29udGV4dC5ibG9ja19zY2FsYXJfaW5kZW50OgorICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LnN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICB5aWVsZCBtYXRjaC5zdGFydCgpLCBUb2tlbkNsYXNzLCB0ZXh0CisgICAgICAgICAgICBjb250ZXh0LnBvcyA9IG1hdGNoLmVuZCgpCisgICAgcmV0dXJuIGNhbGxiYWNrCisKK2RlZiBwYXJzZV9wbGFpbl9zY2FsYXJfaW5kZW50KFRva2VuQ2xhc3MpOgorICAgICIiIlByb2Nlc3MgaW5kZW50YXRpb24gc3BhY2VzIGluIGEgcGxhaW4gc2NhbGFyLiIiIgorICAgIGRlZiBjYWxsYmFjayhsZXhlciwgbWF0Y2gsIGNvbnRleHQpOgorICAgICAgICB0ZXh0ID0gbWF0Y2guZ3JvdXAoKQorICAgICAgICBpZiBsZW4odGV4dCkgPD0gY29udGV4dC5pbmRlbnQ6CisgICAgICAgICAgICBjb250ZXh0LnN0YWNrLnBvcCgpCisgICAgICAgICAgICBjb250ZXh0LnN0YWNrLnBvcCgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgIHlpZWxkIG1hdGNoLnN0YXJ0KCksIFRva2VuQ2xhc3MsIHRleHQKKyAgICAgICAgICAgIGNvbnRleHQucG9zID0gbWF0Y2guZW5kKCkKKyAgICByZXR1cm4gY2FsbGJhY2sKKworCitjbGFzcyBZQU1MTGV4ZXIoRXh0ZW5kZWRSZWdleExleGVyKToKKyAgICAiIiJMZXhlciBmb3IgdGhlIFlBTUwgbGFuZ3VhZ2UuIiIiCisKKyAgICBuYW1lID0gJ1lBTUwnCisgICAgYWxpYXNlcyA9IFsneWFtbCddCisgICAgZmlsZW5hbWVzID0gWycqLnlhbWwnLCAnKi55bWwnXQorICAgIG1pbWV0eXBlcyA9IFsndGV4dC94LXlhbWwnXQorCisgICAgdG9rZW5zID0geworCisgICAgICAgICMgdGhlIHJvb3QgcnVsZXMKKyAgICAgICAgJ3Jvb3QnOiBbCisgICAgICAgICAgICAjIGlnbm9yZWQgd2hpdGVzcGFjZXMKKyAgICAgICAgICAgIChyJ1sgXSsoPz0jfCQpJywgVGV4dC5CbGFuayksCisgICAgICAgICAgICAjIGxpbmUgYnJlYWtzCisgICAgICAgICAgICAocidcbisnLCBUZXh0LkJyZWFrKSwKKyAgICAgICAgICAgICMgYSBjb21tZW50CisgICAgICAgICAgICAocicjW15cbl0qJywgQ29tbWVudC5TaW5nbGUpLAorICAgICAgICAgICAgIyB0aGUgJyVZQU1MJyBkaXJlY3RpdmUKKyAgICAgICAgICAgIChyJ14lWUFNTCg/PVsgXXwkKScsIHJlc2V0X2luZGVudChOYW1lLkRpcmVjdGl2ZSksCisgICAgICAgICAgICAgICAgJ3lhbWwtZGlyZWN0aXZlJyksCisgICAgICAgICAgICAjIHRoZSAlVEFHIGRpcmVjdGl2ZQorICAgICAgICAgICAgKHInXiVUQUcoPz1bIF18JCknLCByZXNldF9pbmRlbnQoTmFtZS5EaXJlY3RpdmUpLAorICAgICAgICAgICAgICAgICd0YWctZGlyZWN0aXZlJyksCisgICAgICAgICAgICAjIGRvY3VtZW50IHN0YXJ0IGFuZCBkb2N1bWVudCBlbmQgaW5kaWNhdG9ycworICAgICAgICAgICAgKHInXig/Oi0tLXxcLlwuXC4pKD89WyBdfCQpJywKKyAgICAgICAgICAgICAgICByZXNldF9pbmRlbnQoUHVuY3R1YXRpb24uRG9jdW1lbnQpLCAnYmxvY2stbGluZScpLAorICAgICAgICAgICAgIyBpbmRlbnRhdGlvbiBzcGFjZXMKKyAgICAgICAgICAgIChyJ1sgXSooPyFbIFx0XG5cclxmXHZdfCQpJywKKyAgICAgICAgICAgICAgICBzYXZlX2luZGVudChUZXh0LkluZGVudCwgc3RhcnQ9VHJ1ZSksCisgICAgICAgICAgICAgICAgKCdibG9jay1saW5lJywgJ2luZGVudGF0aW9uJykpLAorICAgICAgICBdLAorCisgICAgICAgICMgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYWZ0ZXIgZGlyZWN0aXZlcyBvciBhIGJsb2NrIHNjYWxhciBpbmRpY2F0b3IKKyAgICAgICAgJ2lnbm9yZWQtbGluZSc6IFsKKyAgICAgICAgICAgICMgaWdub3JlZCB3aGl0ZXNwYWNlcworICAgICAgICAgICAgKHInWyBdKyg/PSN8JCknLCBUZXh0LkJsYW5rKSwKKyAgICAgICAgICAgICMgYSBjb21tZW50CisgICAgICAgICAgICAocicjW15cbl0qJywgQ29tbWVudC5TaW5nbGUpLAorICAgICAgICAgICAgIyBsaW5lIGJyZWFrCisgICAgICAgICAgICAocidcbicsIFRleHQuQnJlYWssICcjcG9wOjInKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIHRoZSAlWUFNTCBkaXJlY3RpdmUKKyAgICAgICAgJ3lhbWwtZGlyZWN0aXZlJzogWworICAgICAgICAgICAgIyB0aGUgdmVyc2lvbiBudW1iZXIKKyAgICAgICAgICAgIChyJyhbIF0rKShbMC05XStcLlswLTldKyknLAorICAgICAgICAgICAgICAgIGJ5Z3JvdXBzKFRleHQuQmxhbmssIExpdGVyYWwuVmVyc2lvbiksICdpZ25vcmVkLWxpbmUnKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIHRoZSAlWUFHIGRpcmVjdGl2ZQorICAgICAgICAndGFnLWRpcmVjdGl2ZSc6IFsKKyAgICAgICAgICAgICMgYSB0YWcgaGFuZGxlIGFuZCB0aGUgY29ycmVzcG9uZGluZyBwcmVmaXgKKyAgICAgICAgICAgIChyJyhbIF0rKSghfCFbMC05QS1aYS16Xy1dKiEpJworICAgICAgICAgICAgICAgIHInKFsgXSspKCF8IT9bMC05QS1aYS16Oy8/OkAmPSskLF8uIX4qXCcoKVxbXF0lLV0rKScsCisgICAgICAgICAgICAgICAgYnlncm91cHMoVGV4dC5CbGFuaywgTmFtZS5UeXBlLCBUZXh0LkJsYW5rLCBOYW1lLlR5cGUpLAorICAgICAgICAgICAgICAgICdpZ25vcmVkLWxpbmUnKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIGJsb2NrIHNjYWxhciBpbmRpY2F0b3JzIGFuZCBpbmRlbnRhdGlvbiBzcGFjZXMKKyAgICAgICAgJ2luZGVudGF0aW9uJzogWworICAgICAgICAgICAgIyB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgaWdub3JlZAorICAgICAgICAgICAgKHInWyBdKiQnLCBzb21ldGhpbmcoVGV4dC5CbGFuayksICcjcG9wOjInKSwKKyAgICAgICAgICAgICMgd2hpdGVzcGFjZXMgcHJlY2VkaW5nIGJsb2NrIGNvbGxlY3Rpb24gaW5kaWNhdG9ycworICAgICAgICAgICAgKHInWyBdKyg/PVs/Oi1dKD86WyBdfCQpKScsIHNhdmVfaW5kZW50KFRleHQuSW5kZW50KSksCisgICAgICAgICAgICAjIGJsb2NrIGNvbGxlY3Rpb24gaW5kaWNhdG9ycworICAgICAgICAgICAgKHInWz86LV0oPz1bIF18JCknLCBzZXRfaW5kZW50KFB1bmN0dWF0aW9uLkluZGljYXRvcikpLAorICAgICAgICAgICAgIyB0aGUgYmVnaW5uaW5nIGEgYmxvY2sgbGluZQorICAgICAgICAgICAgKHInWyBdKicsIHNhdmVfaW5kZW50KFRleHQuSW5kZW50KSwgJyNwb3AnKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIGFuIGluZGVudGVkIGxpbmUgaW4gdGhlIGJsb2NrIGNvbnRleHQKKyAgICAgICAgJ2Jsb2NrLWxpbmUnOiBbCisgICAgICAgICAgICAjIHRoZSBsaW5lIGVuZAorICAgICAgICAgICAgKHInWyBdKig/PSN8JCknLCBzb21ldGhpbmcoVGV4dC5CbGFuayksICcjcG9wJyksCisgICAgICAgICAgICAjIHdoaXRlc3BhY2VzIHNlcGFyYXRpbmcgdG9rZW5zCisgICAgICAgICAgICAocidbIF0rJywgVGV4dC5CbGFuayksCisgICAgICAgICAgICAjIHRhZ3MsIGFuY2hvcnMgYW5kIGFsaWFzZXMsCisgICAgICAgICAgICBpbmNsdWRlKCdkZXNjcmlwdG9ycycpLAorICAgICAgICAgICAgIyBibG9jayBjb2xsZWN0aW9ucyBhbmQgc2NhbGFycworICAgICAgICAgICAgaW5jbHVkZSgnYmxvY2stbm9kZXMnKSwKKyAgICAgICAgICAgICMgZmxvdyBjb2xsZWN0aW9ucyBhbmQgcXVvdGVkIHNjYWxhcnMKKyAgICAgICAgICAgIGluY2x1ZGUoJ2Zsb3ctbm9kZXMnKSwKKyAgICAgICAgICAgICMgYSBwbGFpbiBzY2FsYXIKKyAgICAgICAgICAgIChyJyg/PVteIFx0XG5cclxmXHY/OixcW1xde30jJiohfD5cJyIlQGAtXXxbPzotXVteIFx0XG5cclxmXHZdKScsCisgICAgICAgICAgICAgICAgc29tZXRoaW5nKExpdGVyYWwuU2NhbGFyLlBsYWluKSwKKyAgICAgICAgICAgICAgICAncGxhaW4tc2NhbGFyLWluLWJsb2NrLWNvbnRleHQnKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIHRhZ3MsIGFuY2hvcnMsIGFsaWFzZXMKKyAgICAgICAgJ2Rlc2NyaXB0b3JzJyA6IFsKKyAgICAgICAgICAgICMgYSBmdWxsLWZvcm0gdGFnCisgICAgICAgICAgICAocichPFswLTlBLVphLXo7Lz86QCY9KyQsXy4hfipcJygpXFtcXSUtXSs+JywgTmFtZS5UeXBlKSwKKyAgICAgICAgICAgICMgYSB0YWcgaW4gdGhlIGZvcm0gJyEnLCAnIXN1ZmZpeCcgb3IgJyFoYW5kbGUhc3VmZml4JworICAgICAgICAgICAgKHInISg/OlswLTlBLVphLXpfLV0rKT8nCisgICAgICAgICAgICAgICAgcicoPzohWzAtOUEtWmEtejsvPzpAJj0rJCxfLiF+KlwnKClcW1xdJS1dKyk/JywgTmFtZS5UeXBlKSwKKyAgICAgICAgICAgICMgYW4gYW5jaG9yCisgICAgICAgICAgICAocicmWzAtOUEtWmEtel8tXSsnLCBOYW1lLkFuY2hvciksCisgICAgICAgICAgICAjIGFuIGFsaWFzCisgICAgICAgICAgICAocidcKlswLTlBLVphLXpfLV0rJywgTmFtZS5BbGlhcyksCisgICAgICAgIF0sCisKKyAgICAgICAgIyBibG9jayBjb2xsZWN0aW9ucyBhbmQgc2NhbGFycworICAgICAgICAnYmxvY2stbm9kZXMnOiBbCisgICAgICAgICAgICAjIGltcGxpY2l0IGtleQorICAgICAgICAgICAgKHInOig/PVsgXXwkKScsIHNldF9pbmRlbnQoUHVuY3R1YXRpb24uSW5kaWNhdG9yLCBpbXBsaWNpdD1UcnVlKSksCisgICAgICAgICAgICAjIGxpdGVyYWwgYW5kIGZvbGRlZCBzY2FsYXJzCisgICAgICAgICAgICAocidbfD5dJywgUHVuY3R1YXRpb24uSW5kaWNhdG9yLAorICAgICAgICAgICAgICAgICgnYmxvY2stc2NhbGFyLWNvbnRlbnQnLCAnYmxvY2stc2NhbGFyLWhlYWRlcicpKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIGZsb3cgY29sbGVjdGlvbnMgYW5kIHF1b3RlZCBzY2FsYXJzCisgICAgICAgICdmbG93LW5vZGVzJzogWworICAgICAgICAgICAgIyBhIGZsb3cgc2VxdWVuY2UKKyAgICAgICAgICAgIChyJ1xbJywgUHVuY3R1YXRpb24uSW5kaWNhdG9yLCAnZmxvdy1zZXF1ZW5jZScpLAorICAgICAgICAgICAgIyBhIGZsb3cgbWFwcGluZworICAgICAgICAgICAgKHInXHsnLCBQdW5jdHVhdGlvbi5JbmRpY2F0b3IsICdmbG93LW1hcHBpbmcnKSwKKyAgICAgICAgICAgICMgYSBzaW5nbGUtcXVvdGVkIHNjYWxhcgorICAgICAgICAgICAgKHInXCcnLCBMaXRlcmFsLlNjYWxhci5GbG93LlF1b3RlLCAnc2luZ2xlLXF1b3RlZC1zY2FsYXInKSwKKyAgICAgICAgICAgICMgYSBkb3VibGUtcXVvdGVkIHNjYWxhcgorICAgICAgICAgICAgKHInXCInLCBMaXRlcmFsLlNjYWxhci5GbG93LlF1b3RlLCAnZG91YmxlLXF1b3RlZC1zY2FsYXInKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIHRoZSBjb250ZW50IG9mIGEgZmxvdyBjb2xsZWN0aW9uCisgICAgICAgICdmbG93LWNvbGxlY3Rpb24nOiBbCisgICAgICAgICAgICAjIHdoaXRlc3BhY2VzCisgICAgICAgICAgICAocidbIF0rJywgVGV4dC5CbGFuayksCisgICAgICAgICAgICAjIGxpbmUgYnJlYWtzCisgICAgICAgICAgICAocidcbisnLCBUZXh0LkJyZWFrKSwKKyAgICAgICAgICAgICMgYSBjb21tZW50CisgICAgICAgICAgICAocicjW15cbl0qJywgQ29tbWVudC5TaW5nbGUpLAorICAgICAgICAgICAgIyBzaW1wbGUgaW5kaWNhdG9ycworICAgICAgICAgICAgKHInWz86LF0nLCBQdW5jdHVhdGlvbi5JbmRpY2F0b3IpLAorICAgICAgICAgICAgIyB0YWdzLCBhbmNob3JzIGFuZCBhbGlhc2VzCisgICAgICAgICAgICBpbmNsdWRlKCdkZXNjcmlwdG9ycycpLAorICAgICAgICAgICAgIyBuZXN0ZWQgY29sbGVjdGlvbnMgYW5kIHF1b3RlZCBzY2FsYXJzCisgICAgICAgICAgICBpbmNsdWRlKCdmbG93LW5vZGVzJyksCisgICAgICAgICAgICAjIGEgcGxhaW4gc2NhbGFyCisgICAgICAgICAgICAocicoPz1bXiBcdFxuXHJcZlx2PzosXFtcXXt9IyYqIXw+XCciJUBgXSknLAorICAgICAgICAgICAgICAgIHNvbWV0aGluZyhMaXRlcmFsLlNjYWxhci5QbGFpbiksCisgICAgICAgICAgICAgICAgJ3BsYWluLXNjYWxhci1pbi1mbG93LWNvbnRleHQnKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIGEgZmxvdyBzZXF1ZW5jZSBpbmRpY2F0ZWQgYnkgJ1snIGFuZCAnXScKKyAgICAgICAgJ2Zsb3ctc2VxdWVuY2UnOiBbCisgICAgICAgICAgICAjIGluY2x1ZGUgZmxvdyBjb2xsZWN0aW9uIHJ1bGVzCisgICAgICAgICAgICBpbmNsdWRlKCdmbG93LWNvbGxlY3Rpb24nKSwKKyAgICAgICAgICAgICMgdGhlIGNsb3NpbmcgaW5kaWNhdG9yCisgICAgICAgICAgICAocidcXScsIFB1bmN0dWF0aW9uLkluZGljYXRvciwgJyNwb3AnKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIGEgZmxvdyBtYXBwaW5nIGluZGljYXRlZCBieSAneycgYW5kICd9JworICAgICAgICAnZmxvdy1tYXBwaW5nJzogWworICAgICAgICAgICAgIyBpbmNsdWRlIGZsb3cgY29sbGVjdGlvbiBydWxlcworICAgICAgICAgICAgaW5jbHVkZSgnZmxvdy1jb2xsZWN0aW9uJyksCisgICAgICAgICAgICAjIHRoZSBjbG9zaW5nIGluZGljYXRvcgorICAgICAgICAgICAgKHInXH0nLCBQdW5jdHVhdGlvbi5JbmRpY2F0b3IsICcjcG9wJyksCisgICAgICAgIF0sCisKKyAgICAgICAgIyBibG9jayBzY2FsYXIgbGluZXMKKyAgICAgICAgJ2Jsb2NrLXNjYWxhci1jb250ZW50JzogWworICAgICAgICAgICAgIyBsaW5lIGJyZWFrCisgICAgICAgICAgICAocidcbicsIFRleHQuQnJlYWspLAorICAgICAgICAgICAgIyBlbXB0eSBsaW5lCisgICAgICAgICAgICAocideWyBdKyQnLAorICAgICAgICAgICAgICAgIHBhcnNlX2Jsb2NrX3NjYWxhcl9lbXB0eV9saW5lKFRleHQuSW5kZW50LAorICAgICAgICAgICAgICAgICAgICBMaXRlcmFsLlNjYWxhci5CbG9jaykpLAorICAgICAgICAgICAgIyBpbmRlbnRhdGlvbiBzcGFjZXMgKHdlIG1heSBsZWF2ZSB0aGUgc3RhdGUgaGVyZSkKKyAgICAgICAgICAgIChyJ15bIF0qJywgcGFyc2VfYmxvY2tfc2NhbGFyX2luZGVudChUZXh0LkluZGVudCkpLAorICAgICAgICAgICAgIyBsaW5lIGNvbnRlbnQKKyAgICAgICAgICAgIChyJ1teXG5cclxmXHZdKycsIExpdGVyYWwuU2NhbGFyLkJsb2NrKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIHRoZSBjb250ZW50IG9mIGEgbGl0ZXJhbCBvciBmb2xkZWQgc2NhbGFyCisgICAgICAgICdibG9jay1zY2FsYXItaGVhZGVyJzogWworICAgICAgICAgICAgIyBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgZm9sbG93ZWQgYnkgY2hvbXBpbmcgZmxhZworICAgICAgICAgICAgKHInKFsxLTldKT9bKy1dPyg/PVsgXXwkKScsCisgICAgICAgICAgICAgICAgc2V0X2Jsb2NrX3NjYWxhcl9pbmRlbnQoUHVuY3R1YXRpb24uSW5kaWNhdG9yKSwKKyAgICAgICAgICAgICAgICAnaWdub3JlZC1saW5lJyksCisgICAgICAgICAgICAjIGNob21waW5nIGZsYWcgZm9sbG93ZWQgYnkgaW5kZW50YXRpb24gaW5kaWNhdG9yCisgICAgICAgICAgICAocidbKy1dPyhbMS05XSk/KD89WyBdfCQpJywKKyAgICAgICAgICAgICAgICBzZXRfYmxvY2tfc2NhbGFyX2luZGVudChQdW5jdHVhdGlvbi5JbmRpY2F0b3IpLAorICAgICAgICAgICAgICAgICdpZ25vcmVkLWxpbmUnKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIGlnbm9yZWQgYW5kIHJlZ3VsYXIgd2hpdGVzcGFjZXMgaW4gcXVvdGVkIHNjYWxhcnMKKyAgICAgICAgJ3F1b3RlZC1zY2FsYXItd2hpdGVzcGFjZXMnOiBbCisgICAgICAgICAgICAjIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAocideWyBdK3xbIF0rJCcsIFRleHQuQmxhbmspLAorICAgICAgICAgICAgIyBsaW5lIGJyZWFrcyBhcmUgaWdub3JlZAorICAgICAgICAgICAgKHInXG4rJywgVGV4dC5CcmVhayksCisgICAgICAgICAgICAjIG90aGVyIHdoaXRlc3BhY2VzIGFyZSBhIHBhcnQgb2YgdGhlIHZhbHVlCisgICAgICAgICAgICAocidbIF0rJywgTGl0ZXJhbC5TY2FsYXIuRmxvdyksCisgICAgICAgIF0sCisKKyAgICAgICAgIyBzaW5nbGUtcXVvdGVkIHNjYWxhcnMKKyAgICAgICAgJ3NpbmdsZS1xdW90ZWQtc2NhbGFyJzogWworICAgICAgICAgICAgIyBpbmNsdWRlIHdoaXRlc3BhY2UgYW5kIGxpbmUgYnJlYWsgcnVsZXMKKyAgICAgICAgICAgIGluY2x1ZGUoJ3F1b3RlZC1zY2FsYXItd2hpdGVzcGFjZXMnKSwKKyAgICAgICAgICAgICMgZXNjYXBpbmcgb2YgdGhlIHF1b3RlIGNoYXJhY3RlcgorICAgICAgICAgICAgKHInXCdcJycsIExpdGVyYWwuU2NhbGFyLkZsb3cuRXNjYXBlKSwKKyAgICAgICAgICAgICMgcmVndWxhciBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAocidbXiBcdFxuXHJcZlx2XCddKycsIExpdGVyYWwuU2NhbGFyLkZsb3cpLAorICAgICAgICAgICAgIyB0aGUgY2xvc2luZyBxdW90ZQorICAgICAgICAgICAgKHInXCcnLCBMaXRlcmFsLlNjYWxhci5GbG93LlF1b3RlLCAnI3BvcCcpLAorICAgICAgICBdLAorCisgICAgICAgICMgZG91YmxlLXF1b3RlZCBzY2FsYXJzCisgICAgICAgICdkb3VibGUtcXVvdGVkLXNjYWxhcic6IFsKKyAgICAgICAgICAgICMgaW5jbHVkZSB3aGl0ZXNwYWNlIGFuZCBsaW5lIGJyZWFrIHJ1bGVzCisgICAgICAgICAgICBpbmNsdWRlKCdxdW90ZWQtc2NhbGFyLXdoaXRlc3BhY2VzJyksCisgICAgICAgICAgICAjIGVzY2FwaW5nIG9mIHNwZWNpYWwgY2hhcmFjdGVycworICAgICAgICAgICAgKHInXFxbMGFidFx0blxudmZyZSAiXFxOX0xQXScsIExpdGVyYWwuU2NhbGFyLkZsb3cuRXNjYXBlKSwKKyAgICAgICAgICAgICMgZXNjYXBlIGNvZGVzCisgICAgICAgICAgICAocidcXCg/OnhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NH18VVswLTlBLUZhLWZdezh9KScsCisgICAgICAgICAgICAgICAgTGl0ZXJhbC5TY2FsYXIuRmxvdy5Fc2NhcGUpLAorICAgICAgICAgICAgIyByZWd1bGFyIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIChyJ1teIFx0XG5cclxmXHZcIlxcXSsnLCBMaXRlcmFsLlNjYWxhci5GbG93KSwKKyAgICAgICAgICAgICMgdGhlIGNsb3NpbmcgcXVvdGUKKyAgICAgICAgICAgIChyJyInLCBMaXRlcmFsLlNjYWxhci5GbG93LlF1b3RlLCAnI3BvcCcpLAorICAgICAgICBdLAorCisgICAgICAgICMgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBsaW5lIHdoaWxlIHNjYW5uaW5nIGEgcGxhaW4gc2NhbGFyCisgICAgICAgICdwbGFpbi1zY2FsYXItaW4tYmxvY2stY29udGV4dC1uZXctbGluZSc6IFsKKyAgICAgICAgICAgICMgZW1wdHkgbGluZXMKKyAgICAgICAgICAgIChyJ15bIF0rJCcsIFRleHQuQmxhbmspLAorICAgICAgICAgICAgIyBsaW5lIGJyZWFrcworICAgICAgICAgICAgKHInXG4rJywgVGV4dC5CcmVhayksCisgICAgICAgICAgICAjIGRvY3VtZW50IHN0YXJ0IGFuZCBkb2N1bWVudCBlbmQgaW5kaWNhdG9ycworICAgICAgICAgICAgKHInXig/PS0tLXxcLlwuXC4pJywgc29tZXRoaW5nKFB1bmN0dWF0aW9uLkRvY3VtZW50KSwgJyNwb3A6MycpLAorICAgICAgICAgICAgIyBpbmRlbnRhdGlvbiBzcGFjZXMgKHdlIG1heSBsZWF2ZSB0aGUgYmxvY2sgbGluZSBzdGF0ZSBoZXJlKQorICAgICAgICAgICAgKHInXlsgXSonLCBwYXJzZV9wbGFpbl9zY2FsYXJfaW5kZW50KFRleHQuSW5kZW50KSwgJyNwb3AnKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIGEgcGxhaW4gc2NhbGFyIGluIHRoZSBibG9jayBjb250ZXh0CisgICAgICAgICdwbGFpbi1zY2FsYXItaW4tYmxvY2stY29udGV4dCc6IFsKKyAgICAgICAgICAgICMgdGhlIHNjYWxhciBlbmRzIHdpdGggdGhlICc6JyBpbmRpY2F0b3IKKyAgICAgICAgICAgIChyJ1sgXSooPz06WyBdfDokKScsIHNvbWV0aGluZyhUZXh0LkJsYW5rKSwgJyNwb3AnKSwKKyAgICAgICAgICAgICMgdGhlIHNjYWxhciBlbmRzIHdpdGggd2hpdGVzcGFjZXMgZm9sbG93ZWQgYnkgYSBjb21tZW50CisgICAgICAgICAgICAocidbIF0rKD89IyknLCBUZXh0LkJsYW5rLCAnI3BvcCcpLAorICAgICAgICAgICAgIyB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgaWdub3JlZAorICAgICAgICAgICAgKHInWyBdKyQnLCBUZXh0LkJsYW5rKSwKKyAgICAgICAgICAgICMgbGluZSBicmVha3MgYXJlIGlnbm9yZWQKKyAgICAgICAgICAgIChyJ1xuKycsIFRleHQuQnJlYWssICdwbGFpbi1zY2FsYXItaW4tYmxvY2stY29udGV4dC1uZXctbGluZScpLAorICAgICAgICAgICAgIyBvdGhlciB3aGl0ZXNwYWNlcyBhcmUgYSBwYXJ0IG9mIHRoZSB2YWx1ZQorICAgICAgICAgICAgKHInWyBdKycsIExpdGVyYWwuU2NhbGFyLlBsYWluKSwKKyAgICAgICAgICAgICMgcmVndWxhciBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAocicoPzo6KD8hWyBcdFxuXHJcZlx2XSl8W14gXHRcblxyXGZcdjpdKSsnLAorICAgICAgICAgICAgICAgIExpdGVyYWwuU2NhbGFyLlBsYWluKSwKKyAgICAgICAgXSwKKworICAgICAgICAjIGEgcGxhaW4gc2NhbGFyIGlzIHRoZSBmbG93IGNvbnRleHQKKyAgICAgICAgJ3BsYWluLXNjYWxhci1pbi1mbG93LWNvbnRleHQnOiBbCisgICAgICAgICAgICAjIHRoZSBzY2FsYXIgZW5kcyB3aXRoIGFuIGluZGljYXRvciBjaGFyYWN0ZXIKKyAgICAgICAgICAgIChyJ1sgXSooPz1bLDo/XFtcXXt9XSknLCBzb21ldGhpbmcoVGV4dC5CbGFuayksICcjcG9wJyksCisgICAgICAgICAgICAjIHRoZSBzY2FsYXIgZW5kcyB3aXRoIGEgY29tbWVudAorICAgICAgICAgICAgKHInWyBdKyg/PSMpJywgVGV4dC5CbGFuaywgJyNwb3AnKSwKKyAgICAgICAgICAgICMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYXJlIGlnbm9yZWQKKyAgICAgICAgICAgIChyJ15bIF0rfFsgXSskJywgVGV4dC5CbGFuayksCisgICAgICAgICAgICAjIGxpbmUgYnJlYWtzIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAocidcbisnLCBUZXh0LkJyZWFrKSwKKyAgICAgICAgICAgICMgb3RoZXIgd2hpdGVzcGFjZXMgYXJlIGEgcGFydCBvZiB0aGUgdmFsdWUKKyAgICAgICAgICAgIChyJ1sgXSsnLCBMaXRlcmFsLlNjYWxhci5QbGFpbiksCisgICAgICAgICAgICAjIHJlZ3VsYXIgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycworICAgICAgICAgICAgKHInW14gXHRcblxyXGZcdiw6P1xbXF17fV0rJywgTGl0ZXJhbC5TY2FsYXIuUGxhaW4pLAorICAgICAgICBdLAorCisgICAgfQorCisgICAgZGVmIGdldF90b2tlbnNfdW5wcm9jZXNzZWQoc2VsZiwgdGV4dD1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gWUFNTExleGVyQ29udGV4dCh0ZXh0LCAwKQorICAgICAgICByZXR1cm4gc3VwZXIoWUFNTExleGVyLCBzZWxmKS5nZXRfdG9rZW5zX3VucHJvY2Vzc2VkKHRleHQsIGNvbnRleHQpCisKKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMveWFtbC1oaWdobGlnaHQveWFtbF9obC5jZmcgYi9leGFtcGxlcy95YW1sLWhpZ2hsaWdodC95YW1sX2hsLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWJiODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMveWFtbC1oaWdobGlnaHQveWFtbF9obC5jZmcKQEAgLTAsMCArMSwxMTUgQEAKKyVZQU1MIDEuMQorLS0tCisKK2FzY2lpOgorCisgICAgaGVhZGVyOiAiXGVbMDsxOzMwOzQwbSIKKworICAgIGZvb3RlcjogIlxlWzBtIgorCisgICAgdG9rZW5zOgorICAgICAgICBzdHJlYW0tc3RhcnQ6CisgICAgICAgIHN0cmVhbS1lbmQ6CisgICAgICAgIGRpcmVjdGl2ZTogICAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszNW0iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGRvY3VtZW50LXN0YXJ0OiAgICAgICAgIHsgc3RhcnQ6ICJcZVszNW0iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGRvY3VtZW50LWVuZDogICAgICAgICAgIHsgc3RhcnQ6ICJcZVszNW0iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGJsb2NrLXNlcXVlbmNlLXN0YXJ0OgorICAgICAgICBibG9jay1tYXBwaW5nLXN0YXJ0OgorICAgICAgICBibG9jay1lbmQ6CisgICAgICAgIGZsb3ctc2VxdWVuY2Utc3RhcnQ6ICAgIHsgc3RhcnQ6ICJcZVszM20iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGZsb3ctbWFwcGluZy1zdGFydDogICAgIHsgc3RhcnQ6ICJcZVszM20iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGZsb3ctc2VxdWVuY2UtZW5kOiAgICAgIHsgc3RhcnQ6ICJcZVszM20iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGZsb3ctbWFwcGluZy1lbmQ6ICAgICAgIHsgc3RhcnQ6ICJcZVszM20iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGtleTogICAgICAgICAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszM20iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIHZhbHVlOiAgICAgICAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszM20iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGJsb2NrLWVudHJ5OiAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszM20iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGZsb3ctZW50cnk6ICAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszM20iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGFsaWFzOiAgICAgICAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszMm0iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIGFuY2hvcjogICAgICAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszMm0iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIHRhZzogICAgICAgICAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszMm0iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisgICAgICAgIHNjYWxhcjogICAgICAgICAgICAgICAgIHsgc3RhcnQ6ICJcZVszNm0iLCBlbmQ6ICJcZVswOzE7MzA7NDBtIiB9CisKKyAgICByZXBsYWNlczoKKyAgICAgICAgLSAiXHJcbiI6ICAgIlxuIgorICAgICAgICAtICJcciI6ICAgICAiXG4iCisgICAgICAgIC0gIlxuIjogICAgICJcbiIKKyAgICAgICAgLSAiXHg4NSI6ICAgIlxuIgorICAgICAgICAtICJcdTIwMjgiOiAiXG4iCisgICAgICAgIC0gIlx1MjAyOSI6ICJcbiIKKworaHRtbDogJmh0bWwKKworICAgIHRva2VuczoKKyAgICAgICAgc3RyZWFtLXN0YXJ0OgorICAgICAgICBzdHJlYW0tZW5kOgorICAgICAgICBkaXJlY3RpdmU6ICAgICAgICAgICAgICB7IHN0YXJ0OiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlX3Rva2VuIj4sIGVuZDogPC9jb2RlPiB9CisgICAgICAgIGRvY3VtZW50LXN0YXJ0OiAgICAgICAgIHsgc3RhcnQ6IDxjb2RlIGNsYXNzPSJkb2N1bWVudF9zdGFydF90b2tlbiI+LCBlbmQ6IDwvY29kZT4gfQorICAgICAgICBkb2N1bWVudC1lbmQ6ICAgICAgICAgICB7IHN0YXJ0OiA8Y29kZSBjbGFzcz0iZG9jdW1lbnRfZW5kX3Rva2VuIj4sIGVuZDogPC9jb2RlPiB9CisgICAgICAgIGJsb2NrLXNlcXVlbmNlLXN0YXJ0OgorICAgICAgICBibG9jay1tYXBwaW5nLXN0YXJ0OgorICAgICAgICBibG9jay1lbmQ6CisgICAgICAgIGZsb3ctc2VxdWVuY2Utc3RhcnQ6ICAgIHsgc3RhcnQ6IDxjb2RlIGNsYXNzPSJkZWxpbWl0ZXJfdG9rZW4iPiwgZW5kOiA8L2NvZGU+IH0KKyAgICAgICAgZmxvdy1tYXBwaW5nLXN0YXJ0OiAgICAgeyBzdGFydDogPGNvZGUgY2xhc3M9ImRlbGltaXRlcl90b2tlbiI+LCBlbmQ6IDwvY29kZT4gfQorICAgICAgICBmbG93LXNlcXVlbmNlLWVuZDogICAgICB7IHN0YXJ0OiA8Y29kZSBjbGFzcz0iZGVsaW1pdGVyX3Rva2VuIj4sIGVuZDogPC9jb2RlPiB9CisgICAgICAgIGZsb3ctbWFwcGluZy1lbmQ6ICAgICAgIHsgc3RhcnQ6IDxjb2RlIGNsYXNzPSJkZWxpbWl0ZXJfdG9rZW4iPiwgZW5kOiA8L2NvZGU+IH0KKyAgICAgICAga2V5OiAgICAgICAgICAgICAgICAgICAgeyBzdGFydDogPGNvZGUgY2xhc3M9ImRlbGltaXRlcl90b2tlbiI+LCBlbmQ6IDwvY29kZT4gfQorICAgICAgICB2YWx1ZTogICAgICAgICAgICAgICAgICB7IHN0YXJ0OiA8Y29kZSBjbGFzcz0iZGVsaW1pdGVyX3Rva2VuIj4sIGVuZDogPC9jb2RlPiB9CisgICAgICAgIGJsb2NrLWVudHJ5OiAgICAgICAgICAgIHsgc3RhcnQ6IDxjb2RlIGNsYXNzPSJkZWxpbWl0ZXJfdG9rZW4iPiwgZW5kOiA8L2NvZGU+IH0KKyAgICAgICAgZmxvdy1lbnRyeTogICAgICAgICAgICAgeyBzdGFydDogPGNvZGUgY2xhc3M9ImRlbGltaXRlcl90b2tlbiI+LCBlbmQ6IDwvY29kZT4gfQorICAgICAgICBhbGlhczogICAgICAgICAgICAgICAgICB7IHN0YXJ0OiA8Y29kZSBjbGFzcz0iYW5jaG9yX3Rva2VuIj4sIGVuZDogPC9jb2RlPiB9CisgICAgICAgIGFuY2hvcjogICAgICAgICAgICAgICAgIHsgc3RhcnQ6IDxjb2RlIGNsYXNzPSJhbmNob3JfdG9rZW4iPiwgZW5kOiA8L2NvZGU+IH0KKyAgICAgICAgdGFnOiAgICAgICAgICAgICAgICAgICAgeyBzdGFydDogPGNvZGUgY2xhc3M9InRhZ190b2tlbiI+LCBlbmQ6IDwvY29kZT4gfQorICAgICAgICBzY2FsYXI6ICAgICAgICAgICAgICAgICB7IHN0YXJ0OiA8Y29kZSBjbGFzcz0ic2NhbGFyX3Rva2VuIj4sIGVuZDogPC9jb2RlPiB9CisKKyAgICBldmVudHM6CisgICAgICAgIHN0cmVhbS1zdGFydDogICB7IHN0YXJ0OiA8cHJlIGNsYXNzPSJ5YW1sX3N0cmVhbSI+IH0KKyAgICAgICAgc3RyZWFtLWVuZDogICAgIHsgZW5kOiA8L3ByZT4gfQorICAgICAgICBkb2N1bWVudC1zdGFydDogeyBzdGFydDogPHNwYW4gY2xhc3M9ImRvY3VtZW50Ij4gfQorICAgICAgICBkb2N1bWVudC1lbmQ6ICAgeyBlbmQ6IDwvc3Bhbj4gfQorICAgICAgICBzZXF1ZW5jZS1zdGFydDogeyBzdGFydDogPHNwYW4gY2xhc3M9InNlcXVlbmNlIj4gfQorICAgICAgICBzZXF1ZW5jZS1lbmQ6ICAgeyBlbmQ6IDwvc3Bhbj4gfQorICAgICAgICBtYXBwaW5nLXN0YXJ0OiAgeyBzdGFydDogPHNwYW4gY2xhc3M9Im1hcHBpbmciPiB9CisgICAgICAgIG1hcHBpbmctZW5kOiAgICB7IGVuZDogPC9zcGFuPiB9CisgICAgICAgIHNjYWxhcjogICAgICAgICB7IHN0YXJ0OiA8c3BhbiBjbGFzcz0ic2NhbGFyIj4sIGVuZDogPC9zcGFuPiB9CisKKyAgICByZXBsYWNlczoKKyAgICAgICAgLSAiXHJcbiI6ICAgIlxuIgorICAgICAgICAtICJcciI6ICAgICAiXG4iCisgICAgICAgIC0gIlxuIjogICAgICJcbiIKKyAgICAgICAgLSAiXHg4NSI6ICAgIlxuIgorICAgICAgICAtICJcdTIwMjgiOiAiXG4iCisgICAgICAgIC0gIlx1MjAyOSI6ICJcbiIKKyAgICAgICAgLSAiJiI6ICAgICAgIiZhbXA7IgorICAgICAgICAtICI8IjogICAgICAiJmx0OyIKKyAgICAgICAgLSAiPiI6ICAgICAgIiZndDsiCisKK2h0bWwtcGFnZToKKworICAgIGhlYWRlcjogfAorICAgICAgICA8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT5BIFlBTUwgc3RyZWFtPC90aXRsZT4KKyAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICAgICAgICAgIC5kb2N1bWVudCB7IGJhY2tncm91bmQ6ICNGRkYgfQorICAgICAgICAgICAgLnNlcXVlbmNlIHsgYmFja2dyb3VuZDogI0VFRiB9CisgICAgICAgICAgICAubWFwcGluZyB7IGJhY2tncm91bmQ6ICNFRkUgfQorICAgICAgICAgICAgLnNjYWxhciB7IGJhY2tncm91bmQ6ICNGRUUgfQorICAgICAgICAgICAgLmRpcmVjdGl2ZV90b2tlbiB7IGNvbG9yOiAjQzBDIH0KKyAgICAgICAgICAgIC5kb2N1bWVudF9zdGFydF90b2tlbiB7IGNvbG9yOiAjQzBDOyBmb250LXdlaWdodDogYm9sZCB9CisgICAgICAgICAgICAuZG9jdW1lbnRfZW5kX3Rva2VuIHsgY29sb3I6ICNDMEM7IGZvbnQtd2VpZ2h0OiBib2xkIH0KKyAgICAgICAgICAgIC5kZWxpbWl0ZXJfdG9rZW4geyBjb2xvcjogIzYwMDsgZm9udC13ZWlnaHQ6IGJvbGQgfQorICAgICAgICAgICAgLmFuY2hvcl90b2tlbiB7IGNvbG9yOiAjMDkwIH0KKyAgICAgICAgICAgIC50YWdfdG9rZW4geyBjb2xvcjogIzA5MCB9CisgICAgICAgICAgICAuc2NhbGFyX3Rva2VuIHsgY29sb3I6ICMwMDAgfQorICAgICAgICAgICAgLnlhbWxfc3RyZWFtIHsgY29sb3I6ICM5OTkgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8Ym9keT4KKworICAgIGZvb3RlcjogfAorICAgICAgICA8L2JvZHk+CisgICAgICAgIDwvaHRtbD4KKworICAgIDw8OiAqaHRtbAorCisKKyMgdmltOiBmdD15YW1sCmRpZmYgLS1naXQgYS9leGFtcGxlcy95YW1sLWhpZ2hsaWdodC95YW1sX2hsLnB5IGIvZXhhbXBsZXMveWFtbC1oaWdobGlnaHQveWFtbF9obC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NmUwYWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMveWFtbC1oaWdobGlnaHQveWFtbF9obC5weQpAQCAtMCwwICsxLDExNCBAQAorIyEvdXNyL2Jpbi9weXRob24KKworaW1wb3J0IHlhbWwsIGNvZGVjcywgc3lzLCBvcy5wYXRoLCBvcHRwYXJzZQorCitjbGFzcyBTdHlsZToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWFkZXI9Tm9uZSwgZm9vdGVyPU5vbmUsCisgICAgICAgICAgICB0b2tlbnM9Tm9uZSwgZXZlbnRzPU5vbmUsIHJlcGxhY2VzPU5vbmUpOgorICAgICAgICBzZWxmLmhlYWRlciA9IGhlYWRlcgorICAgICAgICBzZWxmLmZvb3RlciA9IGZvb3RlcgorICAgICAgICBzZWxmLnJlcGxhY2VzID0gcmVwbGFjZXMKKyAgICAgICAgc2VsZi5zdWJzdGl0dXRpb25zID0ge30KKyAgICAgICAgZm9yIGRvbWFpbiwgQ2xhc3MgaW4gWyh0b2tlbnMsICdUb2tlbicpLCAoZXZlbnRzLCAnRXZlbnQnKV06CisgICAgICAgICAgICBpZiBub3QgZG9tYWluOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3Iga2V5IGluIGRvbWFpbjoKKyAgICAgICAgICAgICAgICBuYW1lID0gJycuam9pbihbcGFydC5jYXBpdGFsaXplKCkgZm9yIHBhcnQgaW4ga2V5LnNwbGl0KCctJyldKQorICAgICAgICAgICAgICAgIGNscyA9IGdldGF0dHIoeWFtbCwgJyVzJXMnICUgKG5hbWUsIENsYXNzKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRvbWFpbltrZXldCisgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gdmFsdWUuZ2V0KCdzdGFydCcpCisgICAgICAgICAgICAgICAgZW5kID0gdmFsdWUuZ2V0KCdlbmQnKQorICAgICAgICAgICAgICAgIGlmIHN0YXJ0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN1YnN0aXR1dGlvbnNbY2xzLCAtMV0gPSBzdGFydAorICAgICAgICAgICAgICAgIGlmIGVuZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdWJzdGl0dXRpb25zW2NscywgKzFdID0gZW5kCisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgc2VsZi5fX2luaXRfXygqKnN0YXRlKQorCit5YW1sLmFkZF9wYXRoX3Jlc29sdmVyKHUndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL29iamVjdDpfX21haW5fXy5TdHlsZScsCisgICAgICAgIFtOb25lXSwgZGljdCkKK3lhbWwuYWRkX3BhdGhfcmVzb2x2ZXIodSd0YWc6eWFtbC5vcmcsMjAwMjpwYWlycycsCisgICAgICAgIFtOb25lLCB1J3JlcGxhY2VzJ10sIGxpc3QpCisKK2NsYXNzIFlBTUxIaWdobGlnaHQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGNvbmZpZyA9IHlhbWwuZnVsbF9sb2FkKGZpbGUob3B0aW9ucy5jb25maWcsICdyYicpLnJlYWQoKSkKKyAgICAgICAgc2VsZi5zdHlsZSA9IGNvbmZpZ1tvcHRpb25zLnN0eWxlXQorICAgICAgICBpZiBvcHRpb25zLmlucHV0OgorICAgICAgICAgICAgc2VsZi5pbnB1dCA9IGZpbGUob3B0aW9ucy5pbnB1dCwgJ3JiJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaW5wdXQgPSBzeXMuc3RkaW4KKyAgICAgICAgaWYgb3B0aW9ucy5vdXRwdXQ6CisgICAgICAgICAgICBzZWxmLm91dHB1dCA9IGZpbGUob3B0aW9ucy5vdXRwdXQsICd3YicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm91dHB1dCA9IHN5cy5zdGRvdXQKKworICAgIGRlZiBoaWdobGlnaHQoc2VsZik6CisgICAgICAgIGlucHV0ID0gc2VsZi5pbnB1dC5yZWFkKCkKKyAgICAgICAgaWYgaW5wdXQuc3RhcnRzd2l0aChjb2RlY3MuQk9NX1VURjE2X0xFKToKKyAgICAgICAgICAgIGlucHV0ID0gdW5pY29kZShpbnB1dCwgJ3V0Zi0xNi1sZScpCisgICAgICAgIGVsaWYgaW5wdXQuc3RhcnRzd2l0aChjb2RlY3MuQk9NX1VURjE2X0JFKToKKyAgICAgICAgICAgIGlucHV0ID0gdW5pY29kZShpbnB1dCwgJ3V0Zi0xNi1iZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbnB1dCA9IHVuaWNvZGUoaW5wdXQsICd1dGYtOCcpCisgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBzZWxmLnN0eWxlLnN1YnN0aXR1dGlvbnMKKyAgICAgICAgdG9rZW5zID0geWFtbC5zY2FuKGlucHV0KQorICAgICAgICBldmVudHMgPSB5YW1sLnBhcnNlKGlucHV0KQorICAgICAgICBtYXJrZXJzID0gW10KKyAgICAgICAgbnVtYmVyID0gMAorICAgICAgICBmb3IgdG9rZW4gaW4gdG9rZW5zOgorICAgICAgICAgICAgbnVtYmVyICs9IDEKKyAgICAgICAgICAgIGlmIHRva2VuLnN0YXJ0X21hcmsuaW5kZXggIT0gdG9rZW4uZW5kX21hcmsuaW5kZXg6CisgICAgICAgICAgICAgICAgY2xzID0gdG9rZW4uX19jbGFzc19fCisgICAgICAgICAgICAgICAgaWYgKGNscywgLTEpIGluIHN1YnN0aXR1dGlvbnM6CisgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMuYXBwZW5kKFt0b2tlbi5zdGFydF9tYXJrLmluZGV4LCArMiwgbnVtYmVyLCBzdWJzdGl0dXRpb25zW2NscywgLTFdXSkKKyAgICAgICAgICAgICAgICBpZiAoY2xzLCArMSkgaW4gc3Vic3RpdHV0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5hcHBlbmQoW3Rva2VuLmVuZF9tYXJrLmluZGV4LCAtMiwgbnVtYmVyLCBzdWJzdGl0dXRpb25zW2NscywgKzFdXSkKKyAgICAgICAgbnVtYmVyID0gMAorICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAgbnVtYmVyICs9IDEKKyAgICAgICAgICAgIGNscyA9IGV2ZW50Ll9fY2xhc3NfXworICAgICAgICAgICAgaWYgKGNscywgLTEpIGluIHN1YnN0aXR1dGlvbnM6CisgICAgICAgICAgICAgICAgbWFya2Vycy5hcHBlbmQoW2V2ZW50LnN0YXJ0X21hcmsuaW5kZXgsICsxLCBudW1iZXIsIHN1YnN0aXR1dGlvbnNbY2xzLCAtMV1dKQorICAgICAgICAgICAgaWYgKGNscywgKzEpIGluIHN1YnN0aXR1dGlvbnM6CisgICAgICAgICAgICAgICAgbWFya2Vycy5hcHBlbmQoW2V2ZW50LmVuZF9tYXJrLmluZGV4LCAtMSwgbnVtYmVyLCBzdWJzdGl0dXRpb25zW2NscywgKzFdXSkKKyAgICAgICAgbWFya2Vycy5zb3J0KCkKKyAgICAgICAgbWFya2Vycy5yZXZlcnNlKCkKKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgcG9zaXRpb24gPSBsZW4oaW5wdXQpCisgICAgICAgIGZvciBpbmRleCwgd2VpZ2h0MSwgd2VpZ2h0Miwgc3Vic3RpdHV0aW9uIGluIG1hcmtlcnM6CisgICAgICAgICAgICBpZiBpbmRleCA8IHBvc2l0aW9uOgorICAgICAgICAgICAgICAgIGNodW5rID0gaW5wdXRbaW5kZXg6cG9zaXRpb25dCisgICAgICAgICAgICAgICAgZm9yIHN1YnN0cmluZywgcmVwbGFjZW1lbnQgaW4gc2VsZi5zdHlsZS5yZXBsYWNlczoKKyAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5yZXBsYWNlKHN1YnN0cmluZywgcmVwbGFjZW1lbnQpCisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChjaHVuaykKKyAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGluZGV4CisgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHN1YnN0aXR1dGlvbikKKyAgICAgICAgY2h1bmtzLnJldmVyc2UoKQorICAgICAgICByZXN1bHQgPSB1Jycuam9pbihjaHVua3MpCisgICAgICAgIGlmIHNlbGYuc3R5bGUuaGVhZGVyOgorICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoc2VsZi5zdHlsZS5oZWFkZXIpCisgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKHJlc3VsdC5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIGlmIHNlbGYuc3R5bGUuZm9vdGVyOgorICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoc2VsZi5zdHlsZS5mb290ZXIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zdHlsZScsIGRlc3Q9J3N0eWxlJywgZGVmYXVsdD0nYXNjaWknLAorICAgICAgICAgICAgaGVscD0ic3BlY2lmeSB0aGUgaGlnaGxpZ2h0aW5nIHN0eWxlIiwgbWV0YXZhcj0nU1RZTEUnKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYycsICctLWNvbmZpZycsIGRlc3Q9J2NvbmZpZycsCisgICAgICAgICAgICBkZWZhdWx0PW9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAneWFtbF9obC5jZmcnKSwKKyAgICAgICAgICAgIGhlbHA9InNldCBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIGZpbGUiLCBtZXRhdmFyPSdDT05GSUcnKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctaScsICctLWlucHV0JywgZGVzdD0naW5wdXQnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICBoZWxwPSJzZXQgdGhlIGlucHV0IGZpbGUgKGRlZmF1bHQ6IHN0ZGluKSIsIG1ldGF2YXI9J0ZJTEUnKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbycsICctLW91dHB1dCcsIGRlc3Q9J291dHB1dCcsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgIGhlbHA9InNldCB0aGUgb3V0cHV0IGZpbGUgKGRlZmF1bHQ6IHN0ZG91dCkiLCBtZXRhdmFyPSdGSUxFJykKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaGwgPSBZQU1MSGlnaGxpZ2h0KG9wdGlvbnMpCisgICAgaGwuaGlnaGxpZ2h0KCkKKwpkaWZmIC0tZ2l0IGEvbGliL195YW1sL19faW5pdF9fLnB5IGIvbGliL195YW1sL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYWE4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvX3lhbWwvX19pbml0X18ucHkKQEAgLTAsMCArMSwzMyBAQAorIyBUaGlzIGlzIGEgc3R1YiBwYWNrYWdlIGRlc2lnbmVkIHRvIHJvdWdobHkgZW11bGF0ZSB0aGUgX3lhbWwKKyMgZXh0ZW5zaW9uIG1vZHVsZSwgd2hpY2ggcHJldmlvdXNseSBleGlzdGVkIGFzIGEgc3RhbmRhbG9uZSBtb2R1bGUKKyMgYW5kIGhhcyBiZWVuIG1vdmVkIGludG8gdGhlIGB5YW1sYCBwYWNrYWdlIG5hbWVzcGFjZS4KKyMgSXQgZG9lcyBub3QgcGVyZmVjdGx5IG1pbWljIGl0cyBvbGQgY291bnRlcnBhcnQsIGJ1dCBzaG91bGQgZ2V0CisjIGNsb3NlIGVub3VnaCBmb3IgYW55b25lIHdobydzIHJlbHlpbmcgb24gaXQgZXZlbiB3aGVuIHRoZXkgc2hvdWxkbid0LgoraW1wb3J0IHlhbWwKKworIyBpbiBzb21lIGNpcmN1bXN0YW5jZXMsIHRoZSB5YW1sIG1vZHVsZSB3ZSBpbW9wcnRlZCBtYXkgYmUgZnJvbSBhIGRpZmZlcmVudCB2ZXJzaW9uLCBzbyB3ZSBuZWVkCisjIHRvIHRyZWFkIGNhcmVmdWxseSB3aGVuIHBva2luZyBhdCBpdCBoZXJlIChpdCBtYXkgbm90IGhhdmUgdGhlIGF0dHJpYnV0ZXMgd2UgZXhwZWN0KQoraWYgbm90IGdldGF0dHIoeWFtbCwgJ19fd2l0aF9saWJ5YW1sX18nLCBGYWxzZSk6CisgICAgZnJvbSBzeXMgaW1wb3J0IHZlcnNpb25faW5mbworCisgICAgZXhjID0gTW9kdWxlTm90Rm91bmRFcnJvciBpZiB2ZXJzaW9uX2luZm8gPj0gKDMsIDYpIGVsc2UgSW1wb3J0RXJyb3IKKyAgICByYWlzZSBleGMoIk5vIG1vZHVsZSBuYW1lZCAnX3lhbWwnIikKK2Vsc2U6CisgICAgZnJvbSB5YW1sLl95YW1sIGltcG9ydCAqCisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgJ1RoZSBfeWFtbCBleHRlbnNpb24gbW9kdWxlIGlzIG5vdyBsb2NhdGVkIGF0IHlhbWwuX3lhbWwnCisgICAgICAgICcgYW5kIGl0cyBsb2NhdGlvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS4gIFRvIHVzZSB0aGUnCisgICAgICAgICcgTGliWUFNTC1iYXNlZCBwYXJzZXIgYW5kIGVtaXR0ZXIsIGltcG9ydCBmcm9tIGB5YW1sYDonCisgICAgICAgICcgYGZyb20geWFtbCBpbXBvcnQgQ0xvYWRlciBhcyBMb2FkZXIsIENEdW1wZXIgYXMgRHVtcGVyYC4nLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcKKyAgICApCisgICAgZGVsIHdhcm5pbmdzCisgICAgIyBEb24ndCBgZGVsIHlhbWxgIGhlcmUgYmVjYXVzZSB5YW1sIGlzIGFjdHVhbGx5IGFuIGV4aXN0aW5nCisgICAgIyBuYW1lc3BhY2UgbWVtYmVyIG9mIF95YW1sLgorCitfX25hbWVfXyA9ICdfeWFtbCcKKyMgSWYgdGhlIG1vZHVsZSBpcyB0b3AtbGV2ZWwgKGkuZS4gbm90IGEgcGFydCBvZiBhbnkgc3BlY2lmaWMgcGFja2FnZSkKKyMgdGhlbiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQgdG8gJycuCisjIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuOC9saWJyYXJ5L3R5cGVzLmh0bWwKK19fcGFja2FnZV9fID0gJycKZGlmZiAtLWdpdCBhL2xpYi95YW1sL0FuZHJvaWQuYnAgYi9saWIveWFtbC9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NjkzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveWFtbC9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMzMgQEAKKy8vIENvcHlyaWdodCAyMDIyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiZXh0ZXJuYWxfcHl0aG9uX3B5eWFtbF9saWNlbnNlIl0sCit9CisKK3B5dGhvbl9saWJyYXJ5IHsKKyAgICBuYW1lOiAicHl5YW1sIiwKKyAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKKyAgICBzcmNzOiBbCisgICAgICAgICIqLnB5IiwKKyAgICBdLAorICAgIHZlcnNpb246IHsKKyAgICAgICAgcHkyOiB7CisgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKKyAgICAgICAgfSwKKyAgICAgICAgcHkzOiB7CisgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAorICAgICAgICB9LAorICAgIH0sCisgICAgcGtnX3BhdGg6ICJ5YW1sIiwKK30KZGlmZiAtLWdpdCBhL2xpYi95YW1sL19faW5pdF9fLnB5IGIvbGliL3lhbWwvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1MDQxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi95YW1sL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzkwIEBACisKK2Zyb20gLmVycm9yIGltcG9ydCAqCisKK2Zyb20gLnRva2VucyBpbXBvcnQgKgorZnJvbSAuZXZlbnRzIGltcG9ydCAqCitmcm9tIC5ub2RlcyBpbXBvcnQgKgorCitmcm9tIC5sb2FkZXIgaW1wb3J0ICoKK2Zyb20gLmR1bXBlciBpbXBvcnQgKgorCitfX3ZlcnNpb25fXyA9ICc2LjAnCit0cnk6CisgICAgZnJvbSAuY3lhbWwgaW1wb3J0ICoKKyAgICBfX3dpdGhfbGlieWFtbF9fID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9fd2l0aF9saWJ5YW1sX18gPSBGYWxzZQorCitpbXBvcnQgaW8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBYWFggIldhcm5pbmdzIGNvbnRyb2wiIGlzIG5vdyBkZXByZWNhdGVkLiBMZWF2aW5nIGluIHRoZSBBUEkgZnVuY3Rpb24gdG8gbm90CisjIGJyZWFrIGNvZGUgdGhhdCB1c2VzIGl0LgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHdhcm5pbmdzKHNldHRpbmdzPU5vbmUpOgorICAgIGlmIHNldHRpbmdzIGlzIE5vbmU6CisgICAgICAgIHJldHVybiB7fQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgc2NhbihzdHJlYW0sIExvYWRlcj1Mb2FkZXIpOgorICAgICIiIgorICAgIFNjYW4gYSBZQU1MIHN0cmVhbSBhbmQgcHJvZHVjZSBzY2FubmluZyB0b2tlbnMuCisgICAgIiIiCisgICAgbG9hZGVyID0gTG9hZGVyKHN0cmVhbSkKKyAgICB0cnk6CisgICAgICAgIHdoaWxlIGxvYWRlci5jaGVja190b2tlbigpOgorICAgICAgICAgICAgeWllbGQgbG9hZGVyLmdldF90b2tlbigpCisgICAgZmluYWxseToKKyAgICAgICAgbG9hZGVyLmRpc3Bvc2UoKQorCitkZWYgcGFyc2Uoc3RyZWFtLCBMb2FkZXI9TG9hZGVyKToKKyAgICAiIiIKKyAgICBQYXJzZSBhIFlBTUwgc3RyZWFtIGFuZCBwcm9kdWNlIHBhcnNpbmcgZXZlbnRzLgorICAgICIiIgorICAgIGxvYWRlciA9IExvYWRlcihzdHJlYW0pCisgICAgdHJ5OgorICAgICAgICB3aGlsZSBsb2FkZXIuY2hlY2tfZXZlbnQoKToKKyAgICAgICAgICAgIHlpZWxkIGxvYWRlci5nZXRfZXZlbnQoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvYWRlci5kaXNwb3NlKCkKKworZGVmIGNvbXBvc2Uoc3RyZWFtLCBMb2FkZXI9TG9hZGVyKToKKyAgICAiIiIKKyAgICBQYXJzZSB0aGUgZmlyc3QgWUFNTCBkb2N1bWVudCBpbiBhIHN0cmVhbQorICAgIGFuZCBwcm9kdWNlIHRoZSBjb3JyZXNwb25kaW5nIHJlcHJlc2VudGF0aW9uIHRyZWUuCisgICAgIiIiCisgICAgbG9hZGVyID0gTG9hZGVyKHN0cmVhbSkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBsb2FkZXIuZ2V0X3NpbmdsZV9ub2RlKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBsb2FkZXIuZGlzcG9zZSgpCisKK2RlZiBjb21wb3NlX2FsbChzdHJlYW0sIExvYWRlcj1Mb2FkZXIpOgorICAgICIiIgorICAgIFBhcnNlIGFsbCBZQU1MIGRvY3VtZW50cyBpbiBhIHN0cmVhbQorICAgIGFuZCBwcm9kdWNlIGNvcnJlc3BvbmRpbmcgcmVwcmVzZW50YXRpb24gdHJlZXMuCisgICAgIiIiCisgICAgbG9hZGVyID0gTG9hZGVyKHN0cmVhbSkKKyAgICB0cnk6CisgICAgICAgIHdoaWxlIGxvYWRlci5jaGVja19ub2RlKCk6CisgICAgICAgICAgICB5aWVsZCBsb2FkZXIuZ2V0X25vZGUoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvYWRlci5kaXNwb3NlKCkKKworZGVmIGxvYWQoc3RyZWFtLCBMb2FkZXIpOgorICAgICIiIgorICAgIFBhcnNlIHRoZSBmaXJzdCBZQU1MIGRvY3VtZW50IGluIGEgc3RyZWFtCisgICAgYW5kIHByb2R1Y2UgdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIG9iamVjdC4KKyAgICAiIiIKKyAgICBsb2FkZXIgPSBMb2FkZXIoc3RyZWFtKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGxvYWRlci5nZXRfc2luZ2xlX2RhdGEoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvYWRlci5kaXNwb3NlKCkKKworZGVmIGxvYWRfYWxsKHN0cmVhbSwgTG9hZGVyKToKKyAgICAiIiIKKyAgICBQYXJzZSBhbGwgWUFNTCBkb2N1bWVudHMgaW4gYSBzdHJlYW0KKyAgICBhbmQgcHJvZHVjZSBjb3JyZXNwb25kaW5nIFB5dGhvbiBvYmplY3RzLgorICAgICIiIgorICAgIGxvYWRlciA9IExvYWRlcihzdHJlYW0pCisgICAgdHJ5OgorICAgICAgICB3aGlsZSBsb2FkZXIuY2hlY2tfZGF0YSgpOgorICAgICAgICAgICAgeWllbGQgbG9hZGVyLmdldF9kYXRhKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBsb2FkZXIuZGlzcG9zZSgpCisKK2RlZiBmdWxsX2xvYWQoc3RyZWFtKToKKyAgICAiIiIKKyAgICBQYXJzZSB0aGUgZmlyc3QgWUFNTCBkb2N1bWVudCBpbiBhIHN0cmVhbQorICAgIGFuZCBwcm9kdWNlIHRoZSBjb3JyZXNwb25kaW5nIFB5dGhvbiBvYmplY3QuCisKKyAgICBSZXNvbHZlIGFsbCB0YWdzIGV4Y2VwdCB0aG9zZSBrbm93biB0byBiZQorICAgIHVuc2FmZSBvbiB1bnRydXN0ZWQgaW5wdXQuCisgICAgIiIiCisgICAgcmV0dXJuIGxvYWQoc3RyZWFtLCBGdWxsTG9hZGVyKQorCitkZWYgZnVsbF9sb2FkX2FsbChzdHJlYW0pOgorICAgICIiIgorICAgIFBhcnNlIGFsbCBZQU1MIGRvY3VtZW50cyBpbiBhIHN0cmVhbQorICAgIGFuZCBwcm9kdWNlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIG9iamVjdHMuCisKKyAgICBSZXNvbHZlIGFsbCB0YWdzIGV4Y2VwdCB0aG9zZSBrbm93biB0byBiZQorICAgIHVuc2FmZSBvbiB1bnRydXN0ZWQgaW5wdXQuCisgICAgIiIiCisgICAgcmV0dXJuIGxvYWRfYWxsKHN0cmVhbSwgRnVsbExvYWRlcikKKworZGVmIHNhZmVfbG9hZChzdHJlYW0pOgorICAgICIiIgorICAgIFBhcnNlIHRoZSBmaXJzdCBZQU1MIGRvY3VtZW50IGluIGEgc3RyZWFtCisgICAgYW5kIHByb2R1Y2UgdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIG9iamVjdC4KKworICAgIFJlc29sdmUgb25seSBiYXNpYyBZQU1MIHRhZ3MuIFRoaXMgaXMga25vd24KKyAgICB0byBiZSBzYWZlIGZvciB1bnRydXN0ZWQgaW5wdXQuCisgICAgIiIiCisgICAgcmV0dXJuIGxvYWQoc3RyZWFtLCBTYWZlTG9hZGVyKQorCitkZWYgc2FmZV9sb2FkX2FsbChzdHJlYW0pOgorICAgICIiIgorICAgIFBhcnNlIGFsbCBZQU1MIGRvY3VtZW50cyBpbiBhIHN0cmVhbQorICAgIGFuZCBwcm9kdWNlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIG9iamVjdHMuCisKKyAgICBSZXNvbHZlIG9ubHkgYmFzaWMgWUFNTCB0YWdzLiBUaGlzIGlzIGtub3duCisgICAgdG8gYmUgc2FmZSBmb3IgdW50cnVzdGVkIGlucHV0LgorICAgICIiIgorICAgIHJldHVybiBsb2FkX2FsbChzdHJlYW0sIFNhZmVMb2FkZXIpCisKK2RlZiB1bnNhZmVfbG9hZChzdHJlYW0pOgorICAgICIiIgorICAgIFBhcnNlIHRoZSBmaXJzdCBZQU1MIGRvY3VtZW50IGluIGEgc3RyZWFtCisgICAgYW5kIHByb2R1Y2UgdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIG9iamVjdC4KKworICAgIFJlc29sdmUgYWxsIHRhZ3MsIGV2ZW4gdGhvc2Uga25vd24gdG8gYmUKKyAgICB1bnNhZmUgb24gdW50cnVzdGVkIGlucHV0LgorICAgICIiIgorICAgIHJldHVybiBsb2FkKHN0cmVhbSwgVW5zYWZlTG9hZGVyKQorCitkZWYgdW5zYWZlX2xvYWRfYWxsKHN0cmVhbSk6CisgICAgIiIiCisgICAgUGFyc2UgYWxsIFlBTUwgZG9jdW1lbnRzIGluIGEgc3RyZWFtCisgICAgYW5kIHByb2R1Y2UgY29ycmVzcG9uZGluZyBQeXRob24gb2JqZWN0cy4KKworICAgIFJlc29sdmUgYWxsIHRhZ3MsIGV2ZW4gdGhvc2Uga25vd24gdG8gYmUKKyAgICB1bnNhZmUgb24gdW50cnVzdGVkIGlucHV0LgorICAgICIiIgorICAgIHJldHVybiBsb2FkX2FsbChzdHJlYW0sIFVuc2FmZUxvYWRlcikKKworZGVmIGVtaXQoZXZlbnRzLCBzdHJlYW09Tm9uZSwgRHVtcGVyPUR1bXBlciwKKyAgICAgICAgY2Fub25pY2FsPU5vbmUsIGluZGVudD1Ob25lLCB3aWR0aD1Ob25lLAorICAgICAgICBhbGxvd191bmljb2RlPU5vbmUsIGxpbmVfYnJlYWs9Tm9uZSk6CisgICAgIiIiCisgICAgRW1pdCBZQU1MIHBhcnNpbmcgZXZlbnRzIGludG8gYSBzdHJlYW0uCisgICAgSWYgc3RyZWFtIGlzIE5vbmUsIHJldHVybiB0aGUgcHJvZHVjZWQgc3RyaW5nIGluc3RlYWQuCisgICAgIiIiCisgICAgZ2V0dmFsdWUgPSBOb25lCisgICAgaWYgc3RyZWFtIGlzIE5vbmU6CisgICAgICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgZ2V0dmFsdWUgPSBzdHJlYW0uZ2V0dmFsdWUKKyAgICBkdW1wZXIgPSBEdW1wZXIoc3RyZWFtLCBjYW5vbmljYWw9Y2Fub25pY2FsLCBpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwKKyAgICAgICAgICAgIGFsbG93X3VuaWNvZGU9YWxsb3dfdW5pY29kZSwgbGluZV9icmVhaz1saW5lX2JyZWFrKQorICAgIHRyeToKKyAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKKyAgICAgICAgICAgIGR1bXBlci5lbWl0KGV2ZW50KQorICAgIGZpbmFsbHk6CisgICAgICAgIGR1bXBlci5kaXNwb3NlKCkKKyAgICBpZiBnZXR2YWx1ZToKKyAgICAgICAgcmV0dXJuIGdldHZhbHVlKCkKKworZGVmIHNlcmlhbGl6ZV9hbGwobm9kZXMsIHN0cmVhbT1Ob25lLCBEdW1wZXI9RHVtcGVyLAorICAgICAgICBjYW5vbmljYWw9Tm9uZSwgaW5kZW50PU5vbmUsIHdpZHRoPU5vbmUsCisgICAgICAgIGFsbG93X3VuaWNvZGU9Tm9uZSwgbGluZV9icmVhaz1Ob25lLAorICAgICAgICBlbmNvZGluZz1Ob25lLCBleHBsaWNpdF9zdGFydD1Ob25lLCBleHBsaWNpdF9lbmQ9Tm9uZSwKKyAgICAgICAgdmVyc2lvbj1Ob25lLCB0YWdzPU5vbmUpOgorICAgICIiIgorICAgIFNlcmlhbGl6ZSBhIHNlcXVlbmNlIG9mIHJlcHJlc2VudGF0aW9uIHRyZWVzIGludG8gYSBZQU1MIHN0cmVhbS4KKyAgICBJZiBzdHJlYW0gaXMgTm9uZSwgcmV0dXJuIHRoZSBwcm9kdWNlZCBzdHJpbmcgaW5zdGVhZC4KKyAgICAiIiIKKyAgICBnZXR2YWx1ZSA9IE5vbmUKKyAgICBpZiBzdHJlYW0gaXMgTm9uZToKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBnZXR2YWx1ZSA9IHN0cmVhbS5nZXR2YWx1ZQorICAgIGR1bXBlciA9IER1bXBlcihzdHJlYW0sIGNhbm9uaWNhbD1jYW5vbmljYWwsIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLAorICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1hbGxvd191bmljb2RlLCBsaW5lX2JyZWFrPWxpbmVfYnJlYWssCisgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgdmVyc2lvbj12ZXJzaW9uLCB0YWdzPXRhZ3MsCisgICAgICAgICAgICBleHBsaWNpdF9zdGFydD1leHBsaWNpdF9zdGFydCwgZXhwbGljaXRfZW5kPWV4cGxpY2l0X2VuZCkKKyAgICB0cnk6CisgICAgICAgIGR1bXBlci5vcGVuKCkKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXM6CisgICAgICAgICAgICBkdW1wZXIuc2VyaWFsaXplKG5vZGUpCisgICAgICAgIGR1bXBlci5jbG9zZSgpCisgICAgZmluYWxseToKKyAgICAgICAgZHVtcGVyLmRpc3Bvc2UoKQorICAgIGlmIGdldHZhbHVlOgorICAgICAgICByZXR1cm4gZ2V0dmFsdWUoKQorCitkZWYgc2VyaWFsaXplKG5vZGUsIHN0cmVhbT1Ob25lLCBEdW1wZXI9RHVtcGVyLCAqKmt3ZHMpOgorICAgICIiIgorICAgIFNlcmlhbGl6ZSBhIHJlcHJlc2VudGF0aW9uIHRyZWUgaW50byBhIFlBTUwgc3RyZWFtLgorICAgIElmIHN0cmVhbSBpcyBOb25lLCByZXR1cm4gdGhlIHByb2R1Y2VkIHN0cmluZyBpbnN0ZWFkLgorICAgICIiIgorICAgIHJldHVybiBzZXJpYWxpemVfYWxsKFtub2RlXSwgc3RyZWFtLCBEdW1wZXI9RHVtcGVyLCAqKmt3ZHMpCisKK2RlZiBkdW1wX2FsbChkb2N1bWVudHMsIHN0cmVhbT1Ob25lLCBEdW1wZXI9RHVtcGVyLAorICAgICAgICBkZWZhdWx0X3N0eWxlPU5vbmUsIGRlZmF1bHRfZmxvd19zdHlsZT1GYWxzZSwKKyAgICAgICAgY2Fub25pY2FsPU5vbmUsIGluZGVudD1Ob25lLCB3aWR0aD1Ob25lLAorICAgICAgICBhbGxvd191bmljb2RlPU5vbmUsIGxpbmVfYnJlYWs9Tm9uZSwKKyAgICAgICAgZW5jb2Rpbmc9Tm9uZSwgZXhwbGljaXRfc3RhcnQ9Tm9uZSwgZXhwbGljaXRfZW5kPU5vbmUsCisgICAgICAgIHZlcnNpb249Tm9uZSwgdGFncz1Ob25lLCBzb3J0X2tleXM9VHJ1ZSk6CisgICAgIiIiCisgICAgU2VyaWFsaXplIGEgc2VxdWVuY2Ugb2YgUHl0aG9uIG9iamVjdHMgaW50byBhIFlBTUwgc3RyZWFtLgorICAgIElmIHN0cmVhbSBpcyBOb25lLCByZXR1cm4gdGhlIHByb2R1Y2VkIHN0cmluZyBpbnN0ZWFkLgorICAgICIiIgorICAgIGdldHZhbHVlID0gTm9uZQorICAgIGlmIHN0cmVhbSBpcyBOb25lOgorICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyZWFtID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGdldHZhbHVlID0gc3RyZWFtLmdldHZhbHVlCisgICAgZHVtcGVyID0gRHVtcGVyKHN0cmVhbSwgZGVmYXVsdF9zdHlsZT1kZWZhdWx0X3N0eWxlLAorICAgICAgICAgICAgZGVmYXVsdF9mbG93X3N0eWxlPWRlZmF1bHRfZmxvd19zdHlsZSwKKyAgICAgICAgICAgIGNhbm9uaWNhbD1jYW5vbmljYWwsIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLAorICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1hbGxvd191bmljb2RlLCBsaW5lX2JyZWFrPWxpbmVfYnJlYWssCisgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgdmVyc2lvbj12ZXJzaW9uLCB0YWdzPXRhZ3MsCisgICAgICAgICAgICBleHBsaWNpdF9zdGFydD1leHBsaWNpdF9zdGFydCwgZXhwbGljaXRfZW5kPWV4cGxpY2l0X2VuZCwgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICB0cnk6CisgICAgICAgIGR1bXBlci5vcGVuKCkKKyAgICAgICAgZm9yIGRhdGEgaW4gZG9jdW1lbnRzOgorICAgICAgICAgICAgZHVtcGVyLnJlcHJlc2VudChkYXRhKQorICAgICAgICBkdW1wZXIuY2xvc2UoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGR1bXBlci5kaXNwb3NlKCkKKyAgICBpZiBnZXR2YWx1ZToKKyAgICAgICAgcmV0dXJuIGdldHZhbHVlKCkKKworZGVmIGR1bXAoZGF0YSwgc3RyZWFtPU5vbmUsIER1bXBlcj1EdW1wZXIsICoqa3dkcyk6CisgICAgIiIiCisgICAgU2VyaWFsaXplIGEgUHl0aG9uIG9iamVjdCBpbnRvIGEgWUFNTCBzdHJlYW0uCisgICAgSWYgc3RyZWFtIGlzIE5vbmUsIHJldHVybiB0aGUgcHJvZHVjZWQgc3RyaW5nIGluc3RlYWQuCisgICAgIiIiCisgICAgcmV0dXJuIGR1bXBfYWxsKFtkYXRhXSwgc3RyZWFtLCBEdW1wZXI9RHVtcGVyLCAqKmt3ZHMpCisKK2RlZiBzYWZlX2R1bXBfYWxsKGRvY3VtZW50cywgc3RyZWFtPU5vbmUsICoqa3dkcyk6CisgICAgIiIiCisgICAgU2VyaWFsaXplIGEgc2VxdWVuY2Ugb2YgUHl0aG9uIG9iamVjdHMgaW50byBhIFlBTUwgc3RyZWFtLgorICAgIFByb2R1Y2Ugb25seSBiYXNpYyBZQU1MIHRhZ3MuCisgICAgSWYgc3RyZWFtIGlzIE5vbmUsIHJldHVybiB0aGUgcHJvZHVjZWQgc3RyaW5nIGluc3RlYWQuCisgICAgIiIiCisgICAgcmV0dXJuIGR1bXBfYWxsKGRvY3VtZW50cywgc3RyZWFtLCBEdW1wZXI9U2FmZUR1bXBlciwgKiprd2RzKQorCitkZWYgc2FmZV9kdW1wKGRhdGEsIHN0cmVhbT1Ob25lLCAqKmt3ZHMpOgorICAgICIiIgorICAgIFNlcmlhbGl6ZSBhIFB5dGhvbiBvYmplY3QgaW50byBhIFlBTUwgc3RyZWFtLgorICAgIFByb2R1Y2Ugb25seSBiYXNpYyBZQU1MIHRhZ3MuCisgICAgSWYgc3RyZWFtIGlzIE5vbmUsIHJldHVybiB0aGUgcHJvZHVjZWQgc3RyaW5nIGluc3RlYWQuCisgICAgIiIiCisgICAgcmV0dXJuIGR1bXBfYWxsKFtkYXRhXSwgc3RyZWFtLCBEdW1wZXI9U2FmZUR1bXBlciwgKiprd2RzKQorCitkZWYgYWRkX2ltcGxpY2l0X3Jlc29sdmVyKHRhZywgcmVnZXhwLCBmaXJzdD1Ob25lLAorICAgICAgICBMb2FkZXI9Tm9uZSwgRHVtcGVyPUR1bXBlcik6CisgICAgIiIiCisgICAgQWRkIGFuIGltcGxpY2l0IHNjYWxhciBkZXRlY3Rvci4KKyAgICBJZiBhbiBpbXBsaWNpdCBzY2FsYXIgdmFsdWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcmVnZXhwLAorICAgIHRoZSBjb3JyZXNwb25kaW5nIHRhZyBpcyBhc3NpZ25lZCB0byB0aGUgc2NhbGFyLgorICAgIGZpcnN0IGlzIGEgc2VxdWVuY2Ugb2YgcG9zc2libGUgaW5pdGlhbCBjaGFyYWN0ZXJzIG9yIE5vbmUuCisgICAgIiIiCisgICAgaWYgTG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGxvYWRlci5Mb2FkZXIuYWRkX2ltcGxpY2l0X3Jlc29sdmVyKHRhZywgcmVnZXhwLCBmaXJzdCkKKyAgICAgICAgbG9hZGVyLkZ1bGxMb2FkZXIuYWRkX2ltcGxpY2l0X3Jlc29sdmVyKHRhZywgcmVnZXhwLCBmaXJzdCkKKyAgICAgICAgbG9hZGVyLlVuc2FmZUxvYWRlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIodGFnLCByZWdleHAsIGZpcnN0KQorICAgIGVsc2U6CisgICAgICAgIExvYWRlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIodGFnLCByZWdleHAsIGZpcnN0KQorICAgIER1bXBlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIodGFnLCByZWdleHAsIGZpcnN0KQorCitkZWYgYWRkX3BhdGhfcmVzb2x2ZXIodGFnLCBwYXRoLCBraW5kPU5vbmUsIExvYWRlcj1Ob25lLCBEdW1wZXI9RHVtcGVyKToKKyAgICAiIiIKKyAgICBBZGQgYSBwYXRoIGJhc2VkIHJlc29sdmVyIGZvciB0aGUgZ2l2ZW4gdGFnLgorICAgIEEgcGF0aCBpcyBhIGxpc3Qgb2Yga2V5cyB0aGF0IGZvcm1zIGEgcGF0aAorICAgIHRvIGEgbm9kZSBpbiB0aGUgcmVwcmVzZW50YXRpb24gdHJlZS4KKyAgICBLZXlzIGNhbiBiZSBzdHJpbmcgdmFsdWVzLCBpbnRlZ2Vycywgb3IgTm9uZS4KKyAgICAiIiIKKyAgICBpZiBMb2FkZXIgaXMgTm9uZToKKyAgICAgICAgbG9hZGVyLkxvYWRlci5hZGRfcGF0aF9yZXNvbHZlcih0YWcsIHBhdGgsIGtpbmQpCisgICAgICAgIGxvYWRlci5GdWxsTG9hZGVyLmFkZF9wYXRoX3Jlc29sdmVyKHRhZywgcGF0aCwga2luZCkKKyAgICAgICAgbG9hZGVyLlVuc2FmZUxvYWRlci5hZGRfcGF0aF9yZXNvbHZlcih0YWcsIHBhdGgsIGtpbmQpCisgICAgZWxzZToKKyAgICAgICAgTG9hZGVyLmFkZF9wYXRoX3Jlc29sdmVyKHRhZywgcGF0aCwga2luZCkKKyAgICBEdW1wZXIuYWRkX3BhdGhfcmVzb2x2ZXIodGFnLCBwYXRoLCBraW5kKQorCitkZWYgYWRkX2NvbnN0cnVjdG9yKHRhZywgY29uc3RydWN0b3IsIExvYWRlcj1Ob25lKToKKyAgICAiIiIKKyAgICBBZGQgYSBjb25zdHJ1Y3RvciBmb3IgdGhlIGdpdmVuIHRhZy4KKyAgICBDb25zdHJ1Y3RvciBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIExvYWRlciBpbnN0YW5jZQorICAgIGFuZCBhIG5vZGUgb2JqZWN0IGFuZCBwcm9kdWNlcyB0aGUgY29ycmVzcG9uZGluZyBQeXRob24gb2JqZWN0LgorICAgICIiIgorICAgIGlmIExvYWRlciBpcyBOb25lOgorICAgICAgICBsb2FkZXIuTG9hZGVyLmFkZF9jb25zdHJ1Y3Rvcih0YWcsIGNvbnN0cnVjdG9yKQorICAgICAgICBsb2FkZXIuRnVsbExvYWRlci5hZGRfY29uc3RydWN0b3IodGFnLCBjb25zdHJ1Y3RvcikKKyAgICAgICAgbG9hZGVyLlVuc2FmZUxvYWRlci5hZGRfY29uc3RydWN0b3IodGFnLCBjb25zdHJ1Y3RvcikKKyAgICBlbHNlOgorICAgICAgICBMb2FkZXIuYWRkX2NvbnN0cnVjdG9yKHRhZywgY29uc3RydWN0b3IpCisKK2RlZiBhZGRfbXVsdGlfY29uc3RydWN0b3IodGFnX3ByZWZpeCwgbXVsdGlfY29uc3RydWN0b3IsIExvYWRlcj1Ob25lKToKKyAgICAiIiIKKyAgICBBZGQgYSBtdWx0aS1jb25zdHJ1Y3RvciBmb3IgdGhlIGdpdmVuIHRhZyBwcmVmaXguCisgICAgTXVsdGktY29uc3RydWN0b3IgaXMgY2FsbGVkIGZvciBhIG5vZGUgaWYgaXRzIHRhZyBzdGFydHMgd2l0aCB0YWdfcHJlZml4LgorICAgIE11bHRpLWNvbnN0cnVjdG9yIGFjY2VwdHMgYSBMb2FkZXIgaW5zdGFuY2UsIGEgdGFnIHN1ZmZpeCwKKyAgICBhbmQgYSBub2RlIG9iamVjdCBhbmQgcHJvZHVjZXMgdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIG9iamVjdC4KKyAgICAiIiIKKyAgICBpZiBMb2FkZXIgaXMgTm9uZToKKyAgICAgICAgbG9hZGVyLkxvYWRlci5hZGRfbXVsdGlfY29uc3RydWN0b3IodGFnX3ByZWZpeCwgbXVsdGlfY29uc3RydWN0b3IpCisgICAgICAgIGxvYWRlci5GdWxsTG9hZGVyLmFkZF9tdWx0aV9jb25zdHJ1Y3Rvcih0YWdfcHJlZml4LCBtdWx0aV9jb25zdHJ1Y3RvcikKKyAgICAgICAgbG9hZGVyLlVuc2FmZUxvYWRlci5hZGRfbXVsdGlfY29uc3RydWN0b3IodGFnX3ByZWZpeCwgbXVsdGlfY29uc3RydWN0b3IpCisgICAgZWxzZToKKyAgICAgICAgTG9hZGVyLmFkZF9tdWx0aV9jb25zdHJ1Y3Rvcih0YWdfcHJlZml4LCBtdWx0aV9jb25zdHJ1Y3RvcikKKworZGVmIGFkZF9yZXByZXNlbnRlcihkYXRhX3R5cGUsIHJlcHJlc2VudGVyLCBEdW1wZXI9RHVtcGVyKToKKyAgICAiIiIKKyAgICBBZGQgYSByZXByZXNlbnRlciBmb3IgdGhlIGdpdmVuIHR5cGUuCisgICAgUmVwcmVzZW50ZXIgaXMgYSBmdW5jdGlvbiBhY2NlcHRpbmcgYSBEdW1wZXIgaW5zdGFuY2UKKyAgICBhbmQgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGRhdGEgdHlwZQorICAgIGFuZCBwcm9kdWNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcmVwcmVzZW50YXRpb24gbm9kZS4KKyAgICAiIiIKKyAgICBEdW1wZXIuYWRkX3JlcHJlc2VudGVyKGRhdGFfdHlwZSwgcmVwcmVzZW50ZXIpCisKK2RlZiBhZGRfbXVsdGlfcmVwcmVzZW50ZXIoZGF0YV90eXBlLCBtdWx0aV9yZXByZXNlbnRlciwgRHVtcGVyPUR1bXBlcik6CisgICAgIiIiCisgICAgQWRkIGEgcmVwcmVzZW50ZXIgZm9yIHRoZSBnaXZlbiB0eXBlLgorICAgIE11bHRpLXJlcHJlc2VudGVyIGlzIGEgZnVuY3Rpb24gYWNjZXB0aW5nIGEgRHVtcGVyIGluc3RhbmNlCisgICAgYW5kIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiBkYXRhIHR5cGUgb3Igc3VidHlwZQorICAgIGFuZCBwcm9kdWNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcmVwcmVzZW50YXRpb24gbm9kZS4KKyAgICAiIiIKKyAgICBEdW1wZXIuYWRkX211bHRpX3JlcHJlc2VudGVyKGRhdGFfdHlwZSwgbXVsdGlfcmVwcmVzZW50ZXIpCisKK2NsYXNzIFlBTUxPYmplY3RNZXRhY2xhc3ModHlwZSk6CisgICAgIiIiCisgICAgVGhlIG1ldGFjbGFzcyBmb3IgWUFNTE9iamVjdC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywga3dkcyk6CisgICAgICAgIHN1cGVyKFlBTUxPYmplY3RNZXRhY2xhc3MsIGNscykuX19pbml0X18obmFtZSwgYmFzZXMsIGt3ZHMpCisgICAgICAgIGlmICd5YW1sX3RhZycgaW4ga3dkcyBhbmQga3dkc1sneWFtbF90YWcnXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2xzLnlhbWxfbG9hZGVyLCBsaXN0KToKKyAgICAgICAgICAgICAgICBmb3IgbG9hZGVyIGluIGNscy55YW1sX2xvYWRlcjoKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmFkZF9jb25zdHJ1Y3RvcihjbHMueWFtbF90YWcsIGNscy5mcm9tX3lhbWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNscy55YW1sX2xvYWRlci5hZGRfY29uc3RydWN0b3IoY2xzLnlhbWxfdGFnLCBjbHMuZnJvbV95YW1sKQorCisgICAgICAgICAgICBjbHMueWFtbF9kdW1wZXIuYWRkX3JlcHJlc2VudGVyKGNscywgY2xzLnRvX3lhbWwpCisKK2NsYXNzIFlBTUxPYmplY3QobWV0YWNsYXNzPVlBTUxPYmplY3RNZXRhY2xhc3MpOgorICAgICIiIgorICAgIEFuIG9iamVjdCB0aGF0IGNhbiBkdW1wIGl0c2VsZiB0byBhIFlBTUwgc3RyZWFtCisgICAgYW5kIGxvYWQgaXRzZWxmIGZyb20gYSBZQU1MIHN0cmVhbS4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpICAjIG5vIGRpcmVjdCBpbnN0YW50aWF0aW9uLCBzbyBhbGxvdyBpbW11dGFibGUgc3ViY2xhc3NlcworCisgICAgeWFtbF9sb2FkZXIgPSBbTG9hZGVyLCBGdWxsTG9hZGVyLCBVbnNhZmVMb2FkZXJdCisgICAgeWFtbF9kdW1wZXIgPSBEdW1wZXIKKworICAgIHlhbWxfdGFnID0gTm9uZQorICAgIHlhbWxfZmxvd19zdHlsZSA9IE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX3lhbWwoY2xzLCBsb2FkZXIsIG5vZGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCBhIHJlcHJlc2VudGF0aW9uIG5vZGUgdG8gYSBQeXRob24gb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGxvYWRlci5jb25zdHJ1Y3RfeWFtbF9vYmplY3Qobm9kZSwgY2xzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRvX3lhbWwoY2xzLCBkdW1wZXIsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCBhIFB5dGhvbiBvYmplY3QgdG8gYSByZXByZXNlbnRhdGlvbiBub2RlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGR1bXBlci5yZXByZXNlbnRfeWFtbF9vYmplY3QoY2xzLnlhbWxfdGFnLCBkYXRhLCBjbHMsCisgICAgICAgICAgICAgICAgZmxvd19zdHlsZT1jbHMueWFtbF9mbG93X3N0eWxlKQorCmRpZmYgLS1naXQgYS9saWIveWFtbC9jb21wb3Nlci5weSBiL2xpYi95YW1sL2NvbXBvc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTVjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveWFtbC9jb21wb3Nlci5weQpAQCAtMCwwICsxLDEzOSBAQAorCitfX2FsbF9fID0gWydDb21wb3NlcicsICdDb21wb3NlckVycm9yJ10KKworZnJvbSAuZXJyb3IgaW1wb3J0IE1hcmtlZFlBTUxFcnJvcgorZnJvbSAuZXZlbnRzIGltcG9ydCAqCitmcm9tIC5ub2RlcyBpbXBvcnQgKgorCitjbGFzcyBDb21wb3NlckVycm9yKE1hcmtlZFlBTUxFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBDb21wb3NlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5hbmNob3JzID0ge30KKworICAgIGRlZiBjaGVja19ub2RlKHNlbGYpOgorICAgICAgICAjIERyb3AgdGhlIFNUUkVBTS1TVEFSVCBldmVudC4KKyAgICAgICAgaWYgc2VsZi5jaGVja19ldmVudChTdHJlYW1TdGFydEV2ZW50KToKKyAgICAgICAgICAgIHNlbGYuZ2V0X2V2ZW50KCkKKworICAgICAgICAjIElmIHRoZXJlIGFyZSBtb3JlIGRvY3VtZW50cyBhdmFpbGFibGU/CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5jaGVja19ldmVudChTdHJlYW1FbmRFdmVudCkKKworICAgIGRlZiBnZXRfbm9kZShzZWxmKToKKyAgICAgICAgIyBHZXQgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgbmV4dCBkb2N1bWVudC4KKyAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tfZXZlbnQoU3RyZWFtRW5kRXZlbnQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tcG9zZV9kb2N1bWVudCgpCisKKyAgICBkZWYgZ2V0X3NpbmdsZV9ub2RlKHNlbGYpOgorICAgICAgICAjIERyb3AgdGhlIFNUUkVBTS1TVEFSVCBldmVudC4KKyAgICAgICAgc2VsZi5nZXRfZXZlbnQoKQorCisgICAgICAgICMgQ29tcG9zZSBhIGRvY3VtZW50IGlmIHRoZSBzdHJlYW0gaXMgbm90IGVtcHR5LgorICAgICAgICBkb2N1bWVudCA9IE5vbmUKKyAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tfZXZlbnQoU3RyZWFtRW5kRXZlbnQpOgorICAgICAgICAgICAgZG9jdW1lbnQgPSBzZWxmLmNvbXBvc2VfZG9jdW1lbnQoKQorCisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHN0cmVhbSBjb250YWlucyBubyBtb3JlIGRvY3VtZW50cy4KKyAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tfZXZlbnQoU3RyZWFtRW5kRXZlbnQpOgorICAgICAgICAgICAgZXZlbnQgPSBzZWxmLmdldF9ldmVudCgpCisgICAgICAgICAgICByYWlzZSBDb21wb3NlckVycm9yKCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtIiwKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuc3RhcnRfbWFyaywgImJ1dCBmb3VuZCBhbm90aGVyIGRvY3VtZW50IiwKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnRfbWFyaykKKworICAgICAgICAjIERyb3AgdGhlIFNUUkVBTS1FTkQgZXZlbnQuCisgICAgICAgIHNlbGYuZ2V0X2V2ZW50KCkKKworICAgICAgICByZXR1cm4gZG9jdW1lbnQKKworICAgIGRlZiBjb21wb3NlX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIERyb3AgdGhlIERPQ1VNRU5ULVNUQVJUIGV2ZW50LgorICAgICAgICBzZWxmLmdldF9ldmVudCgpCisKKyAgICAgICAgIyBDb21wb3NlIHRoZSByb290IG5vZGUuCisgICAgICAgIG5vZGUgPSBzZWxmLmNvbXBvc2Vfbm9kZShOb25lLCBOb25lKQorCisgICAgICAgICMgRHJvcCB0aGUgRE9DVU1FTlQtRU5EIGV2ZW50LgorICAgICAgICBzZWxmLmdldF9ldmVudCgpCisKKyAgICAgICAgc2VsZi5hbmNob3JzID0ge30KKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiBjb21wb3NlX25vZGUoc2VsZiwgcGFyZW50LCBpbmRleCk6CisgICAgICAgIGlmIHNlbGYuY2hlY2tfZXZlbnQoQWxpYXNFdmVudCk6CisgICAgICAgICAgICBldmVudCA9IHNlbGYuZ2V0X2V2ZW50KCkKKyAgICAgICAgICAgIGFuY2hvciA9IGV2ZW50LmFuY2hvcgorICAgICAgICAgICAgaWYgYW5jaG9yIG5vdCBpbiBzZWxmLmFuY2hvcnM6CisgICAgICAgICAgICAgICAgcmFpc2UgQ29tcG9zZXJFcnJvcihOb25lLCBOb25lLCAiZm91bmQgdW5kZWZpbmVkIGFsaWFzICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgJSBhbmNob3IsIGV2ZW50LnN0YXJ0X21hcmspCisgICAgICAgICAgICByZXR1cm4gc2VsZi5hbmNob3JzW2FuY2hvcl0KKyAgICAgICAgZXZlbnQgPSBzZWxmLnBlZWtfZXZlbnQoKQorICAgICAgICBhbmNob3IgPSBldmVudC5hbmNob3IKKyAgICAgICAgaWYgYW5jaG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgYW5jaG9yIGluIHNlbGYuYW5jaG9yczoKKyAgICAgICAgICAgICAgICByYWlzZSBDb21wb3NlckVycm9yKCJmb3VuZCBkdXBsaWNhdGUgYW5jaG9yICVyOyBmaXJzdCBvY2N1cnJlbmNlIgorICAgICAgICAgICAgICAgICAgICAgICAgJSBhbmNob3IsIHNlbGYuYW5jaG9yc1thbmNob3JdLnN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICAgICAic2Vjb25kIG9jY3VycmVuY2UiLCBldmVudC5zdGFydF9tYXJrKQorICAgICAgICBzZWxmLmRlc2NlbmRfcmVzb2x2ZXIocGFyZW50LCBpbmRleCkKKyAgICAgICAgaWYgc2VsZi5jaGVja19ldmVudChTY2FsYXJFdmVudCk6CisgICAgICAgICAgICBub2RlID0gc2VsZi5jb21wb3NlX3NjYWxhcl9ub2RlKGFuY2hvcikKKyAgICAgICAgZWxpZiBzZWxmLmNoZWNrX2V2ZW50KFNlcXVlbmNlU3RhcnRFdmVudCk6CisgICAgICAgICAgICBub2RlID0gc2VsZi5jb21wb3NlX3NlcXVlbmNlX25vZGUoYW5jaG9yKQorICAgICAgICBlbGlmIHNlbGYuY2hlY2tfZXZlbnQoTWFwcGluZ1N0YXJ0RXZlbnQpOgorICAgICAgICAgICAgbm9kZSA9IHNlbGYuY29tcG9zZV9tYXBwaW5nX25vZGUoYW5jaG9yKQorICAgICAgICBzZWxmLmFzY2VuZF9yZXNvbHZlcigpCisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgY29tcG9zZV9zY2FsYXJfbm9kZShzZWxmLCBhbmNob3IpOgorICAgICAgICBldmVudCA9IHNlbGYuZ2V0X2V2ZW50KCkKKyAgICAgICAgdGFnID0gZXZlbnQudGFnCisgICAgICAgIGlmIHRhZyBpcyBOb25lIG9yIHRhZyA9PSAnISc6CisgICAgICAgICAgICB0YWcgPSBzZWxmLnJlc29sdmUoU2NhbGFyTm9kZSwgZXZlbnQudmFsdWUsIGV2ZW50LmltcGxpY2l0KQorICAgICAgICBub2RlID0gU2NhbGFyTm9kZSh0YWcsIGV2ZW50LnZhbHVlLAorICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0X21hcmssIGV2ZW50LmVuZF9tYXJrLCBzdHlsZT1ldmVudC5zdHlsZSkKKyAgICAgICAgaWYgYW5jaG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hbmNob3JzW2FuY2hvcl0gPSBub2RlCisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgY29tcG9zZV9zZXF1ZW5jZV9ub2RlKHNlbGYsIGFuY2hvcik6CisgICAgICAgIHN0YXJ0X2V2ZW50ID0gc2VsZi5nZXRfZXZlbnQoKQorICAgICAgICB0YWcgPSBzdGFydF9ldmVudC50YWcKKyAgICAgICAgaWYgdGFnIGlzIE5vbmUgb3IgdGFnID09ICchJzoKKyAgICAgICAgICAgIHRhZyA9IHNlbGYucmVzb2x2ZShTZXF1ZW5jZU5vZGUsIE5vbmUsIHN0YXJ0X2V2ZW50LmltcGxpY2l0KQorICAgICAgICBub2RlID0gU2VxdWVuY2VOb2RlKHRhZywgW10sCisgICAgICAgICAgICAgICAgc3RhcnRfZXZlbnQuc3RhcnRfbWFyaywgTm9uZSwKKyAgICAgICAgICAgICAgICBmbG93X3N0eWxlPXN0YXJ0X2V2ZW50LmZsb3dfc3R5bGUpCisgICAgICAgIGlmIGFuY2hvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYW5jaG9yc1thbmNob3JdID0gbm9kZQorICAgICAgICBpbmRleCA9IDAKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuY2hlY2tfZXZlbnQoU2VxdWVuY2VFbmRFdmVudCk6CisgICAgICAgICAgICBub2RlLnZhbHVlLmFwcGVuZChzZWxmLmNvbXBvc2Vfbm9kZShub2RlLCBpbmRleCkpCisgICAgICAgICAgICBpbmRleCArPSAxCisgICAgICAgIGVuZF9ldmVudCA9IHNlbGYuZ2V0X2V2ZW50KCkKKyAgICAgICAgbm9kZS5lbmRfbWFyayA9IGVuZF9ldmVudC5lbmRfbWFyaworICAgICAgICByZXR1cm4gbm9kZQorCisgICAgZGVmIGNvbXBvc2VfbWFwcGluZ19ub2RlKHNlbGYsIGFuY2hvcik6CisgICAgICAgIHN0YXJ0X2V2ZW50ID0gc2VsZi5nZXRfZXZlbnQoKQorICAgICAgICB0YWcgPSBzdGFydF9ldmVudC50YWcKKyAgICAgICAgaWYgdGFnIGlzIE5vbmUgb3IgdGFnID09ICchJzoKKyAgICAgICAgICAgIHRhZyA9IHNlbGYucmVzb2x2ZShNYXBwaW5nTm9kZSwgTm9uZSwgc3RhcnRfZXZlbnQuaW1wbGljaXQpCisgICAgICAgIG5vZGUgPSBNYXBwaW5nTm9kZSh0YWcsIFtdLAorICAgICAgICAgICAgICAgIHN0YXJ0X2V2ZW50LnN0YXJ0X21hcmssIE5vbmUsCisgICAgICAgICAgICAgICAgZmxvd19zdHlsZT1zdGFydF9ldmVudC5mbG93X3N0eWxlKQorICAgICAgICBpZiBhbmNob3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFuY2hvcnNbYW5jaG9yXSA9IG5vZGUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuY2hlY2tfZXZlbnQoTWFwcGluZ0VuZEV2ZW50KToKKyAgICAgICAgICAgICNrZXlfZXZlbnQgPSBzZWxmLnBlZWtfZXZlbnQoKQorICAgICAgICAgICAgaXRlbV9rZXkgPSBzZWxmLmNvbXBvc2Vfbm9kZShub2RlLCBOb25lKQorICAgICAgICAgICAgI2lmIGl0ZW1fa2V5IGluIG5vZGUudmFsdWU6CisgICAgICAgICAgICAjICAgIHJhaXNlIENvbXBvc2VyRXJyb3IoIndoaWxlIGNvbXBvc2luZyBhIG1hcHBpbmciLCBzdGFydF9ldmVudC5zdGFydF9tYXJrLAorICAgICAgICAgICAgIyAgICAgICAgICAgICJmb3VuZCBkdXBsaWNhdGUga2V5Iiwga2V5X2V2ZW50LnN0YXJ0X21hcmspCisgICAgICAgICAgICBpdGVtX3ZhbHVlID0gc2VsZi5jb21wb3NlX25vZGUobm9kZSwgaXRlbV9rZXkpCisgICAgICAgICAgICAjbm9kZS52YWx1ZVtpdGVtX2tleV0gPSBpdGVtX3ZhbHVlCisgICAgICAgICAgICBub2RlLnZhbHVlLmFwcGVuZCgoaXRlbV9rZXksIGl0ZW1fdmFsdWUpKQorICAgICAgICBlbmRfZXZlbnQgPSBzZWxmLmdldF9ldmVudCgpCisgICAgICAgIG5vZGUuZW5kX21hcmsgPSBlbmRfZXZlbnQuZW5kX21hcmsKKyAgICAgICAgcmV0dXJuIG5vZGUKKwpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvY29uc3RydWN0b3IucHkgYi9saWIveWFtbC9jb25zdHJ1Y3Rvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTlhY2QzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvY29uc3RydWN0b3IucHkKQEAgLTAsMCArMSw3NDggQEAKKworX19hbGxfXyA9IFsKKyAgICAnQmFzZUNvbnN0cnVjdG9yJywKKyAgICAnU2FmZUNvbnN0cnVjdG9yJywKKyAgICAnRnVsbENvbnN0cnVjdG9yJywKKyAgICAnVW5zYWZlQ29uc3RydWN0b3InLAorICAgICdDb25zdHJ1Y3RvcicsCisgICAgJ0NvbnN0cnVjdG9yRXJyb3InCitdCisKK2Zyb20gLmVycm9yIGltcG9ydCAqCitmcm9tIC5ub2RlcyBpbXBvcnQgKgorCitpbXBvcnQgY29sbGVjdGlvbnMuYWJjLCBkYXRldGltZSwgYmFzZTY0LCBiaW5hc2NpaSwgcmUsIHN5cywgdHlwZXMKKworY2xhc3MgQ29uc3RydWN0b3JFcnJvcihNYXJrZWRZQU1MRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgQmFzZUNvbnN0cnVjdG9yOgorCisgICAgeWFtbF9jb25zdHJ1Y3RvcnMgPSB7fQorICAgIHlhbWxfbXVsdGlfY29uc3RydWN0b3JzID0ge30KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25zdHJ1Y3RlZF9vYmplY3RzID0ge30KKyAgICAgICAgc2VsZi5yZWN1cnNpdmVfb2JqZWN0cyA9IHt9CisgICAgICAgIHNlbGYuc3RhdGVfZ2VuZXJhdG9ycyA9IFtdCisgICAgICAgIHNlbGYuZGVlcF9jb25zdHJ1Y3QgPSBGYWxzZQorCisgICAgZGVmIGNoZWNrX2RhdGEoc2VsZik6CisgICAgICAgICMgSWYgdGhlcmUgYXJlIG1vcmUgZG9jdW1lbnRzIGF2YWlsYWJsZT8KKyAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tfbm9kZSgpCisKKyAgICBkZWYgY2hlY2tfc3RhdGVfa2V5KHNlbGYsIGtleSk6CisgICAgICAgICIiIkJsb2NrIHNwZWNpYWwgYXR0cmlidXRlcy9tZXRob2RzIGZyb20gYmVpbmcgc2V0IGluIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICBvYmplY3QsIHRvIHByZXZlbnQgdXNlci1jb250cm9sbGVkIG1ldGhvZHMgZnJvbSBiZWluZyBjYWxsZWQgZHVyaW5nCisgICAgICAgIGRlc2VyaWFsaXphdGlvbiIiIgorICAgICAgICBpZiBzZWxmLmdldF9zdGF0ZV9rZXlzX2JsYWNrbGlzdF9yZWdleHAoKS5tYXRjaChrZXkpOgorICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcihOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICJibGFja2xpc3RlZCBrZXkgJyVzJyBpbiBpbnN0YW5jZSBzdGF0ZSBmb3VuZCIgJSAoa2V5LCksIE5vbmUpCisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZik6CisgICAgICAgICMgQ29uc3RydWN0IGFuZCByZXR1cm4gdGhlIG5leHQgZG9jdW1lbnQuCisgICAgICAgIGlmIHNlbGYuY2hlY2tfbm9kZSgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uc3RydWN0X2RvY3VtZW50KHNlbGYuZ2V0X25vZGUoKSkKKworICAgIGRlZiBnZXRfc2luZ2xlX2RhdGEoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHN0cmVhbSBjb250YWlucyBhIHNpbmdsZSBkb2N1bWVudCBhbmQgY29uc3RydWN0IGl0LgorICAgICAgICBub2RlID0gc2VsZi5nZXRfc2luZ2xlX25vZGUoKQorICAgICAgICBpZiBub2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uc3RydWN0X2RvY3VtZW50KG5vZGUpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY29uc3RydWN0X2RvY3VtZW50KHNlbGYsIG5vZGUpOgorICAgICAgICBkYXRhID0gc2VsZi5jb25zdHJ1Y3Rfb2JqZWN0KG5vZGUpCisgICAgICAgIHdoaWxlIHNlbGYuc3RhdGVfZ2VuZXJhdG9yczoKKyAgICAgICAgICAgIHN0YXRlX2dlbmVyYXRvcnMgPSBzZWxmLnN0YXRlX2dlbmVyYXRvcnMKKyAgICAgICAgICAgIHNlbGYuc3RhdGVfZ2VuZXJhdG9ycyA9IFtdCisgICAgICAgICAgICBmb3IgZ2VuZXJhdG9yIGluIHN0YXRlX2dlbmVyYXRvcnM6CisgICAgICAgICAgICAgICAgZm9yIGR1bW15IGluIGdlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNvbnN0cnVjdGVkX29iamVjdHMgPSB7fQorICAgICAgICBzZWxmLnJlY3Vyc2l2ZV9vYmplY3RzID0ge30KKyAgICAgICAgc2VsZi5kZWVwX2NvbnN0cnVjdCA9IEZhbHNlCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgY29uc3RydWN0X29iamVjdChzZWxmLCBub2RlLCBkZWVwPUZhbHNlKToKKyAgICAgICAgaWYgbm9kZSBpbiBzZWxmLmNvbnN0cnVjdGVkX29iamVjdHM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb25zdHJ1Y3RlZF9vYmplY3RzW25vZGVdCisgICAgICAgIGlmIGRlZXA6CisgICAgICAgICAgICBvbGRfZGVlcCA9IHNlbGYuZGVlcF9jb25zdHJ1Y3QKKyAgICAgICAgICAgIHNlbGYuZGVlcF9jb25zdHJ1Y3QgPSBUcnVlCisgICAgICAgIGlmIG5vZGUgaW4gc2VsZi5yZWN1cnNpdmVfb2JqZWN0czoKKyAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgImZvdW5kIHVuY29uc3RydWN0YWJsZSByZWN1cnNpdmUgbm9kZSIsIG5vZGUuc3RhcnRfbWFyaykKKyAgICAgICAgc2VsZi5yZWN1cnNpdmVfb2JqZWN0c1tub2RlXSA9IE5vbmUKKyAgICAgICAgY29uc3RydWN0b3IgPSBOb25lCisgICAgICAgIHRhZ19zdWZmaXggPSBOb25lCisgICAgICAgIGlmIG5vZGUudGFnIGluIHNlbGYueWFtbF9jb25zdHJ1Y3RvcnM6CisgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IHNlbGYueWFtbF9jb25zdHJ1Y3RvcnNbbm9kZS50YWddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgdGFnX3ByZWZpeCBpbiBzZWxmLnlhbWxfbXVsdGlfY29uc3RydWN0b3JzOgorICAgICAgICAgICAgICAgIGlmIHRhZ19wcmVmaXggaXMgbm90IE5vbmUgYW5kIG5vZGUudGFnLnN0YXJ0c3dpdGgodGFnX3ByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgIHRhZ19zdWZmaXggPSBub2RlLnRhZ1tsZW4odGFnX3ByZWZpeCk6XQorICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IHNlbGYueWFtbF9tdWx0aV9jb25zdHJ1Y3RvcnNbdGFnX3ByZWZpeF0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgTm9uZSBpbiBzZWxmLnlhbWxfbXVsdGlfY29uc3RydWN0b3JzOgorICAgICAgICAgICAgICAgICAgICB0YWdfc3VmZml4ID0gbm9kZS50YWcKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBzZWxmLnlhbWxfbXVsdGlfY29uc3RydWN0b3JzW05vbmVdCisgICAgICAgICAgICAgICAgZWxpZiBOb25lIGluIHNlbGYueWFtbF9jb25zdHJ1Y3RvcnM6CisgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gc2VsZi55YW1sX2NvbnN0cnVjdG9yc1tOb25lXQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBTY2FsYXJOb2RlKToKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBzZWxmLl9fY2xhc3NfXy5jb25zdHJ1Y3Rfc2NhbGFyCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIFNlcXVlbmNlTm9kZSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gc2VsZi5fX2NsYXNzX18uY29uc3RydWN0X3NlcXVlbmNlCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE1hcHBpbmdOb2RlKToKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBzZWxmLl9fY2xhc3NfXy5jb25zdHJ1Y3RfbWFwcGluZworICAgICAgICBpZiB0YWdfc3VmZml4IGlzIE5vbmU6CisgICAgICAgICAgICBkYXRhID0gY29uc3RydWN0b3Ioc2VsZiwgbm9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSBjb25zdHJ1Y3RvcihzZWxmLCB0YWdfc3VmZml4LCBub2RlKQorICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIHR5cGVzLkdlbmVyYXRvclR5cGUpOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gZGF0YQorICAgICAgICAgICAgZGF0YSA9IG5leHQoZ2VuZXJhdG9yKQorICAgICAgICAgICAgaWYgc2VsZi5kZWVwX2NvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBmb3IgZHVtbXkgaW4gZ2VuZXJhdG9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVfZ2VuZXJhdG9ycy5hcHBlbmQoZ2VuZXJhdG9yKQorICAgICAgICBzZWxmLmNvbnN0cnVjdGVkX29iamVjdHNbbm9kZV0gPSBkYXRhCisgICAgICAgIGRlbCBzZWxmLnJlY3Vyc2l2ZV9vYmplY3RzW25vZGVdCisgICAgICAgIGlmIGRlZXA6CisgICAgICAgICAgICBzZWxmLmRlZXBfY29uc3RydWN0ID0gb2xkX2RlZXAKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBjb25zdHJ1Y3Rfc2NhbGFyKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShub2RlLCBTY2FsYXJOb2RlKToKKyAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgc2NhbGFyIG5vZGUsIGJ1dCBmb3VuZCAlcyIgJSBub2RlLmlkLAorICAgICAgICAgICAgICAgICAgICBub2RlLnN0YXJ0X21hcmspCisgICAgICAgIHJldHVybiBub2RlLnZhbHVlCisKKyAgICBkZWYgY29uc3RydWN0X3NlcXVlbmNlKHNlbGYsIG5vZGUsIGRlZXA9RmFsc2UpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShub2RlLCBTZXF1ZW5jZU5vZGUpOgorICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcihOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBzZXF1ZW5jZSBub2RlLCBidXQgZm91bmQgJXMiICUgbm9kZS5pZCwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5zdGFydF9tYXJrKQorICAgICAgICByZXR1cm4gW3NlbGYuY29uc3RydWN0X29iamVjdChjaGlsZCwgZGVlcD1kZWVwKQorICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiBub2RlLnZhbHVlXQorCisgICAgZGVmIGNvbnN0cnVjdF9tYXBwaW5nKHNlbGYsIG5vZGUsIGRlZXA9RmFsc2UpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShub2RlLCBNYXBwaW5nTm9kZSk6CisgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhIG1hcHBpbmcgbm9kZSwgYnV0IGZvdW5kICVzIiAlIG5vZGUuaWQsCisgICAgICAgICAgICAgICAgICAgIG5vZGUuc3RhcnRfbWFyaykKKyAgICAgICAgbWFwcGluZyA9IHt9CisgICAgICAgIGZvciBrZXlfbm9kZSwgdmFsdWVfbm9kZSBpbiBub2RlLnZhbHVlOgorICAgICAgICAgICAga2V5ID0gc2VsZi5jb25zdHJ1Y3Rfb2JqZWN0KGtleV9ub2RlLCBkZWVwPWRlZXApCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGNvbGxlY3Rpb25zLmFiYy5IYXNoYWJsZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcigid2hpbGUgY29uc3RydWN0aW5nIGEgbWFwcGluZyIsIG5vZGUuc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICJmb3VuZCB1bmhhc2hhYmxlIGtleSIsIGtleV9ub2RlLnN0YXJ0X21hcmspCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuY29uc3RydWN0X29iamVjdCh2YWx1ZV9ub2RlLCBkZWVwPWRlZXApCisgICAgICAgICAgICBtYXBwaW5nW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gbWFwcGluZworCisgICAgZGVmIGNvbnN0cnVjdF9wYWlycyhzZWxmLCBub2RlLCBkZWVwPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZSwgTWFwcGluZ05vZGUpOgorICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcihOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBtYXBwaW5nIG5vZGUsIGJ1dCBmb3VuZCAlcyIgJSBub2RlLmlkLAorICAgICAgICAgICAgICAgICAgICBub2RlLnN0YXJ0X21hcmspCisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAgZm9yIGtleV9ub2RlLCB2YWx1ZV9ub2RlIGluIG5vZGUudmFsdWU6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmNvbnN0cnVjdF9vYmplY3Qoa2V5X25vZGUsIGRlZXA9ZGVlcCkKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5jb25zdHJ1Y3Rfb2JqZWN0KHZhbHVlX25vZGUsIGRlZXA9ZGVlcCkKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBwYWlycworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFkZF9jb25zdHJ1Y3RvcihjbHMsIHRhZywgY29uc3RydWN0b3IpOgorICAgICAgICBpZiBub3QgJ3lhbWxfY29uc3RydWN0b3JzJyBpbiBjbHMuX19kaWN0X186CisgICAgICAgICAgICBjbHMueWFtbF9jb25zdHJ1Y3RvcnMgPSBjbHMueWFtbF9jb25zdHJ1Y3RvcnMuY29weSgpCisgICAgICAgIGNscy55YW1sX2NvbnN0cnVjdG9yc1t0YWddID0gY29uc3RydWN0b3IKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhZGRfbXVsdGlfY29uc3RydWN0b3IoY2xzLCB0YWdfcHJlZml4LCBtdWx0aV9jb25zdHJ1Y3Rvcik6CisgICAgICAgIGlmIG5vdCAneWFtbF9tdWx0aV9jb25zdHJ1Y3RvcnMnIGluIGNscy5fX2RpY3RfXzoKKyAgICAgICAgICAgIGNscy55YW1sX211bHRpX2NvbnN0cnVjdG9ycyA9IGNscy55YW1sX211bHRpX2NvbnN0cnVjdG9ycy5jb3B5KCkKKyAgICAgICAgY2xzLnlhbWxfbXVsdGlfY29uc3RydWN0b3JzW3RhZ19wcmVmaXhdID0gbXVsdGlfY29uc3RydWN0b3IKKworY2xhc3MgU2FmZUNvbnN0cnVjdG9yKEJhc2VDb25zdHJ1Y3Rvcik6CisKKyAgICBkZWYgY29uc3RydWN0X3NjYWxhcihzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBNYXBwaW5nTm9kZSk6CisgICAgICAgICAgICBmb3Iga2V5X25vZGUsIHZhbHVlX25vZGUgaW4gbm9kZS52YWx1ZToKKyAgICAgICAgICAgICAgICBpZiBrZXlfbm9kZS50YWcgPT0gJ3RhZzp5YW1sLm9yZywyMDAyOnZhbHVlJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uc3RydWN0X3NjYWxhcih2YWx1ZV9ub2RlKQorICAgICAgICByZXR1cm4gc3VwZXIoKS5jb25zdHJ1Y3Rfc2NhbGFyKG5vZGUpCisKKyAgICBkZWYgZmxhdHRlbl9tYXBwaW5nKHNlbGYsIG5vZGUpOgorICAgICAgICBtZXJnZSA9IFtdCisgICAgICAgIGluZGV4ID0gMAorICAgICAgICB3aGlsZSBpbmRleCA8IGxlbihub2RlLnZhbHVlKToKKyAgICAgICAgICAgIGtleV9ub2RlLCB2YWx1ZV9ub2RlID0gbm9kZS52YWx1ZVtpbmRleF0KKyAgICAgICAgICAgIGlmIGtleV9ub2RlLnRhZyA9PSAndGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UnOgorICAgICAgICAgICAgICAgIGRlbCBub2RlLnZhbHVlW2luZGV4XQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWVfbm9kZSwgTWFwcGluZ05vZGUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZsYXR0ZW5fbWFwcGluZyh2YWx1ZV9ub2RlKQorICAgICAgICAgICAgICAgICAgICBtZXJnZS5leHRlbmQodmFsdWVfbm9kZS52YWx1ZSkKKyAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWVfbm9kZSwgU2VxdWVuY2VOb2RlKToKKyAgICAgICAgICAgICAgICAgICAgc3VibWVyZ2UgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3Igc3Vibm9kZSBpbiB2YWx1ZV9ub2RlLnZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3Vibm9kZSwgTWFwcGluZ05vZGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyBhIG1hcHBpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbWFwcGluZyBmb3IgbWVyZ2luZywgYnV0IGZvdW5kICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzdWJub2RlLmlkLCBzdWJub2RlLnN0YXJ0X21hcmspCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZsYXR0ZW5fbWFwcGluZyhzdWJub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VibWVyZ2UuYXBwZW5kKHN1Ym5vZGUudmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHN1Ym1lcmdlLnJldmVyc2UoKQorICAgICAgICAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gc3VibWVyZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZS5leHRlbmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcigid2hpbGUgY29uc3RydWN0aW5nIGEgbWFwcGluZyIsIG5vZGUuc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBtYXBwaW5nIG9yIGxpc3Qgb2YgbWFwcGluZ3MgZm9yIG1lcmdpbmcsIGJ1dCBmb3VuZCAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHZhbHVlX25vZGUuaWQsIHZhbHVlX25vZGUuc3RhcnRfbWFyaykKKyAgICAgICAgICAgIGVsaWYga2V5X25vZGUudGFnID09ICd0YWc6eWFtbC5vcmcsMjAwMjp2YWx1ZSc6CisgICAgICAgICAgICAgICAga2V5X25vZGUudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicKKyAgICAgICAgICAgICAgICBpbmRleCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZGV4ICs9IDEKKyAgICAgICAgaWYgbWVyZ2U6CisgICAgICAgICAgICBub2RlLnZhbHVlID0gbWVyZ2UgKyBub2RlLnZhbHVlCisKKyAgICBkZWYgY29uc3RydWN0X21hcHBpbmcoc2VsZiwgbm9kZSwgZGVlcD1GYWxzZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgTWFwcGluZ05vZGUpOgorICAgICAgICAgICAgc2VsZi5mbGF0dGVuX21hcHBpbmcobm9kZSkKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuY29uc3RydWN0X21hcHBpbmcobm9kZSwgZGVlcD1kZWVwKQorCisgICAgZGVmIGNvbnN0cnVjdF95YW1sX251bGwoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuY29uc3RydWN0X3NjYWxhcihub2RlKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgYm9vbF92YWx1ZXMgPSB7CisgICAgICAgICd5ZXMnOiAgICAgIFRydWUsCisgICAgICAgICdubyc6ICAgICAgIEZhbHNlLAorICAgICAgICAndHJ1ZSc6ICAgICBUcnVlLAorICAgICAgICAnZmFsc2UnOiAgICBGYWxzZSwKKyAgICAgICAgJ29uJzogICAgICAgVHJ1ZSwKKyAgICAgICAgJ29mZic6ICAgICAgRmFsc2UsCisgICAgfQorCisgICAgZGVmIGNvbnN0cnVjdF95YW1sX2Jvb2woc2VsZiwgbm9kZSk6CisgICAgICAgIHZhbHVlID0gc2VsZi5jb25zdHJ1Y3Rfc2NhbGFyKG5vZGUpCisgICAgICAgIHJldHVybiBzZWxmLmJvb2xfdmFsdWVzW3ZhbHVlLmxvd2VyKCldCisKKyAgICBkZWYgY29uc3RydWN0X3lhbWxfaW50KHNlbGYsIG5vZGUpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuY29uc3RydWN0X3NjYWxhcihub2RlKQorICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ18nLCAnJykKKyAgICAgICAgc2lnbiA9ICsxCisgICAgICAgIGlmIHZhbHVlWzBdID09ICctJzoKKyAgICAgICAgICAgIHNpZ24gPSAtMQorICAgICAgICBpZiB2YWx1ZVswXSBpbiAnKy0nOgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVsxOl0KKyAgICAgICAgaWYgdmFsdWUgPT0gJzAnOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxpZiB2YWx1ZS5zdGFydHN3aXRoKCcwYicpOgorICAgICAgICAgICAgcmV0dXJuIHNpZ24qaW50KHZhbHVlWzI6XSwgMikKKyAgICAgICAgZWxpZiB2YWx1ZS5zdGFydHN3aXRoKCcweCcpOgorICAgICAgICAgICAgcmV0dXJuIHNpZ24qaW50KHZhbHVlWzI6XSwgMTYpCisgICAgICAgIGVsaWYgdmFsdWVbMF0gPT0gJzAnOgorICAgICAgICAgICAgcmV0dXJuIHNpZ24qaW50KHZhbHVlLCA4KQorICAgICAgICBlbGlmICc6JyBpbiB2YWx1ZToKKyAgICAgICAgICAgIGRpZ2l0cyA9IFtpbnQocGFydCkgZm9yIHBhcnQgaW4gdmFsdWUuc3BsaXQoJzonKV0KKyAgICAgICAgICAgIGRpZ2l0cy5yZXZlcnNlKCkKKyAgICAgICAgICAgIGJhc2UgPSAxCisgICAgICAgICAgICB2YWx1ZSA9IDAKKyAgICAgICAgICAgIGZvciBkaWdpdCBpbiBkaWdpdHM6CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gZGlnaXQqYmFzZQorICAgICAgICAgICAgICAgIGJhc2UgKj0gNjAKKyAgICAgICAgICAgIHJldHVybiBzaWduKnZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2lnbippbnQodmFsdWUpCisKKyAgICBpbmZfdmFsdWUgPSAxZTMwMAorICAgIHdoaWxlIGluZl92YWx1ZSAhPSBpbmZfdmFsdWUqaW5mX3ZhbHVlOgorICAgICAgICBpbmZfdmFsdWUgKj0gaW5mX3ZhbHVlCisgICAgbmFuX3ZhbHVlID0gLWluZl92YWx1ZS9pbmZfdmFsdWUgICAjIFRyeWluZyB0byBtYWtlIGEgcXVpZXQgTmFOIChsaWtlIEM5OSkuCisKKyAgICBkZWYgY29uc3RydWN0X3lhbWxfZmxvYXQoc2VsZiwgbm9kZSk6CisgICAgICAgIHZhbHVlID0gc2VsZi5jb25zdHJ1Y3Rfc2NhbGFyKG5vZGUpCisgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnXycsICcnKS5sb3dlcigpCisgICAgICAgIHNpZ24gPSArMQorICAgICAgICBpZiB2YWx1ZVswXSA9PSAnLSc6CisgICAgICAgICAgICBzaWduID0gLTEKKyAgICAgICAgaWYgdmFsdWVbMF0gaW4gJystJzoKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMTpdCisgICAgICAgIGlmIHZhbHVlID09ICcuaW5mJzoKKyAgICAgICAgICAgIHJldHVybiBzaWduKnNlbGYuaW5mX3ZhbHVlCisgICAgICAgIGVsaWYgdmFsdWUgPT0gJy5uYW4nOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFuX3ZhbHVlCisgICAgICAgIGVsaWYgJzonIGluIHZhbHVlOgorICAgICAgICAgICAgZGlnaXRzID0gW2Zsb2F0KHBhcnQpIGZvciBwYXJ0IGluIHZhbHVlLnNwbGl0KCc6JyldCisgICAgICAgICAgICBkaWdpdHMucmV2ZXJzZSgpCisgICAgICAgICAgICBiYXNlID0gMQorICAgICAgICAgICAgdmFsdWUgPSAwLjAKKyAgICAgICAgICAgIGZvciBkaWdpdCBpbiBkaWdpdHM6CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gZGlnaXQqYmFzZQorICAgICAgICAgICAgICAgIGJhc2UgKj0gNjAKKyAgICAgICAgICAgIHJldHVybiBzaWduKnZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2lnbipmbG9hdCh2YWx1ZSkKKworICAgIGRlZiBjb25zdHJ1Y3RfeWFtbF9iaW5hcnkoc2VsZiwgbm9kZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5jb25zdHJ1Y3Rfc2NhbGFyKG5vZGUpLmVuY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBjb252ZXJ0IGJhc2U2NCBkYXRhIGludG8gYXNjaWk6ICVzIiAlIGV4YywKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5zdGFydF9tYXJrKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBoYXNhdHRyKGJhc2U2NCwgJ2RlY29kZWJ5dGVzJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NC5kZWNvZGVieXRlcyh2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NC5kZWNvZGVzdHJpbmcodmFsdWUpCisgICAgICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gZGVjb2RlIGJhc2U2NCBkYXRhOiAlcyIgJSBleGMsIG5vZGUuc3RhcnRfbWFyaykKKworICAgIHRpbWVzdGFtcF9yZWdleHAgPSByZS5jb21waWxlKAorICAgICAgICAgICAgcicnJ14oP1A8eWVhcj5bMC05XVswLTldWzAtOV1bMC05XSkKKyAgICAgICAgICAgICAgICAtKD9QPG1vbnRoPlswLTldWzAtOV0/KQorICAgICAgICAgICAgICAgIC0oP1A8ZGF5PlswLTldWzAtOV0/KQorICAgICAgICAgICAgICAgICg/Oig/OltUdF18WyBcdF0rKQorICAgICAgICAgICAgICAgICg/UDxob3VyPlswLTldWzAtOV0/KQorICAgICAgICAgICAgICAgIDooP1A8bWludXRlPlswLTldWzAtOV0pCisgICAgICAgICAgICAgICAgOig/UDxzZWNvbmQ+WzAtOV1bMC05XSkKKyAgICAgICAgICAgICAgICAoPzpcLig/UDxmcmFjdGlvbj5bMC05XSopKT8KKyAgICAgICAgICAgICAgICAoPzpbIFx0XSooP1A8dHo+WnwoP1A8dHpfc2lnbj5bLStdKSg/UDx0el9ob3VyPlswLTldWzAtOV0/KQorICAgICAgICAgICAgICAgICg/OjooP1A8dHpfbWludXRlPlswLTldWzAtOV0pKT8pKT8pPyQnJycsIHJlLlgpCisKKyAgICBkZWYgY29uc3RydWN0X3lhbWxfdGltZXN0YW1wKHNlbGYsIG5vZGUpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuY29uc3RydWN0X3NjYWxhcihub2RlKQorICAgICAgICBtYXRjaCA9IHNlbGYudGltZXN0YW1wX3JlZ2V4cC5tYXRjaChub2RlLnZhbHVlKQorICAgICAgICB2YWx1ZXMgPSBtYXRjaC5ncm91cGRpY3QoKQorICAgICAgICB5ZWFyID0gaW50KHZhbHVlc1sneWVhciddKQorICAgICAgICBtb250aCA9IGludCh2YWx1ZXNbJ21vbnRoJ10pCisgICAgICAgIGRheSA9IGludCh2YWx1ZXNbJ2RheSddKQorICAgICAgICBpZiBub3QgdmFsdWVzWydob3VyJ106CisgICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZSh5ZWFyLCBtb250aCwgZGF5KQorICAgICAgICBob3VyID0gaW50KHZhbHVlc1snaG91ciddKQorICAgICAgICBtaW51dGUgPSBpbnQodmFsdWVzWydtaW51dGUnXSkKKyAgICAgICAgc2Vjb25kID0gaW50KHZhbHVlc1snc2Vjb25kJ10pCisgICAgICAgIGZyYWN0aW9uID0gMAorICAgICAgICB0emluZm8gPSBOb25lCisgICAgICAgIGlmIHZhbHVlc1snZnJhY3Rpb24nXToKKyAgICAgICAgICAgIGZyYWN0aW9uID0gdmFsdWVzWydmcmFjdGlvbiddWzo2XQorICAgICAgICAgICAgd2hpbGUgbGVuKGZyYWN0aW9uKSA8IDY6CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gKz0gJzAnCisgICAgICAgICAgICBmcmFjdGlvbiA9IGludChmcmFjdGlvbikKKyAgICAgICAgaWYgdmFsdWVzWyd0el9zaWduJ106CisgICAgICAgICAgICB0el9ob3VyID0gaW50KHZhbHVlc1sndHpfaG91ciddKQorICAgICAgICAgICAgdHpfbWludXRlID0gaW50KHZhbHVlc1sndHpfbWludXRlJ10gb3IgMCkKKyAgICAgICAgICAgIGRlbHRhID0gZGF0ZXRpbWUudGltZWRlbHRhKGhvdXJzPXR6X2hvdXIsIG1pbnV0ZXM9dHpfbWludXRlKQorICAgICAgICAgICAgaWYgdmFsdWVzWyd0el9zaWduJ10gPT0gJy0nOgorICAgICAgICAgICAgICAgIGRlbHRhID0gLWRlbHRhCisgICAgICAgICAgICB0emluZm8gPSBkYXRldGltZS50aW1lem9uZShkZWx0YSkKKyAgICAgICAgZWxpZiB2YWx1ZXNbJ3R6J106CisgICAgICAgICAgICB0emluZm8gPSBkYXRldGltZS50aW1lem9uZS51dGMKKyAgICAgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz10emluZm8pCisKKyAgICBkZWYgY29uc3RydWN0X3lhbWxfb21hcChzZWxmLCBub2RlKToKKyAgICAgICAgIyBOb3RlOiB3ZSBkbyBub3QgY2hlY2sgZm9yIGR1cGxpY2F0ZSBrZXlzLCBiZWNhdXNlIGl0J3MgdG9vCisgICAgICAgICMgQ1BVLWV4cGVuc2l2ZS4KKyAgICAgICAgb21hcCA9IFtdCisgICAgICAgIHlpZWxkIG9tYXAKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZSwgU2VxdWVuY2VOb2RlKToKKyAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyBhbiBvcmRlcmVkIG1hcCIsIG5vZGUuc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgc2VxdWVuY2UsIGJ1dCBmb3VuZCAlcyIgJSBub2RlLmlkLCBub2RlLnN0YXJ0X21hcmspCisgICAgICAgIGZvciBzdWJub2RlIGluIG5vZGUudmFsdWU6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzdWJub2RlLCBNYXBwaW5nTm9kZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcigid2hpbGUgY29uc3RydWN0aW5nIGFuIG9yZGVyZWQgbWFwIiwgbm9kZS5zdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbWFwcGluZyBvZiBsZW5ndGggMSwgYnV0IGZvdW5kICVzIiAlIHN1Ym5vZGUuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJub2RlLnN0YXJ0X21hcmspCisgICAgICAgICAgICBpZiBsZW4oc3Vibm9kZS52YWx1ZSkgIT0gMToKKyAgICAgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKCJ3aGlsZSBjb25zdHJ1Y3RpbmcgYW4gb3JkZXJlZCBtYXAiLCBub2RlLnN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBzaW5nbGUgbWFwcGluZyBpdGVtLCBidXQgZm91bmQgJWQgaXRlbXMiICUgbGVuKHN1Ym5vZGUudmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Vibm9kZS5zdGFydF9tYXJrKQorICAgICAgICAgICAga2V5X25vZGUsIHZhbHVlX25vZGUgPSBzdWJub2RlLnZhbHVlWzBdCisgICAgICAgICAgICBrZXkgPSBzZWxmLmNvbnN0cnVjdF9vYmplY3Qoa2V5X25vZGUpCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuY29uc3RydWN0X29iamVjdCh2YWx1ZV9ub2RlKQorICAgICAgICAgICAgb21hcC5hcHBlbmQoKGtleSwgdmFsdWUpKQorCisgICAgZGVmIGNvbnN0cnVjdF95YW1sX3BhaXJzKHNlbGYsIG5vZGUpOgorICAgICAgICAjIE5vdGU6IHRoZSBzYW1lIGNvZGUgYXMgYGNvbnN0cnVjdF95YW1sX29tYXBgLgorICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIHlpZWxkIHBhaXJzCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5vZGUsIFNlcXVlbmNlTm9kZSk6CisgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKCJ3aGlsZSBjb25zdHJ1Y3RpbmcgcGFpcnMiLCBub2RlLnN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhIHNlcXVlbmNlLCBidXQgZm91bmQgJXMiICUgbm9kZS5pZCwgbm9kZS5zdGFydF9tYXJrKQorICAgICAgICBmb3Igc3Vibm9kZSBpbiBub2RlLnZhbHVlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3Vibm9kZSwgTWFwcGluZ05vZGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyBwYWlycyIsIG5vZGUuc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhIG1hcHBpbmcgb2YgbGVuZ3RoIDEsIGJ1dCBmb3VuZCAlcyIgJSBzdWJub2RlLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Vibm9kZS5zdGFydF9tYXJrKQorICAgICAgICAgICAgaWYgbGVuKHN1Ym5vZGUudmFsdWUpICE9IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcigid2hpbGUgY29uc3RydWN0aW5nIHBhaXJzIiwgbm9kZS5zdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgc2luZ2xlIG1hcHBpbmcgaXRlbSwgYnV0IGZvdW5kICVkIGl0ZW1zIiAlIGxlbihzdWJub2RlLnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym5vZGUuc3RhcnRfbWFyaykKKyAgICAgICAgICAgIGtleV9ub2RlLCB2YWx1ZV9ub2RlID0gc3Vibm9kZS52YWx1ZVswXQorICAgICAgICAgICAga2V5ID0gc2VsZi5jb25zdHJ1Y3Rfb2JqZWN0KGtleV9ub2RlKQorICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmNvbnN0cnVjdF9vYmplY3QodmFsdWVfbm9kZSkKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCisKKyAgICBkZWYgY29uc3RydWN0X3lhbWxfc2V0KHNlbGYsIG5vZGUpOgorICAgICAgICBkYXRhID0gc2V0KCkKKyAgICAgICAgeWllbGQgZGF0YQorICAgICAgICB2YWx1ZSA9IHNlbGYuY29uc3RydWN0X21hcHBpbmcobm9kZSkKKyAgICAgICAgZGF0YS51cGRhdGUodmFsdWUpCisKKyAgICBkZWYgY29uc3RydWN0X3lhbWxfc3RyKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25zdHJ1Y3Rfc2NhbGFyKG5vZGUpCisKKyAgICBkZWYgY29uc3RydWN0X3lhbWxfc2VxKHNlbGYsIG5vZGUpOgorICAgICAgICBkYXRhID0gW10KKyAgICAgICAgeWllbGQgZGF0YQorICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmNvbnN0cnVjdF9zZXF1ZW5jZShub2RlKSkKKworICAgIGRlZiBjb25zdHJ1Y3RfeWFtbF9tYXAoc2VsZiwgbm9kZSk6CisgICAgICAgIGRhdGEgPSB7fQorICAgICAgICB5aWVsZCBkYXRhCisgICAgICAgIHZhbHVlID0gc2VsZi5jb25zdHJ1Y3RfbWFwcGluZyhub2RlKQorICAgICAgICBkYXRhLnVwZGF0ZSh2YWx1ZSkKKworICAgIGRlZiBjb25zdHJ1Y3RfeWFtbF9vYmplY3Qoc2VsZiwgbm9kZSwgY2xzKToKKyAgICAgICAgZGF0YSA9IGNscy5fX25ld19fKGNscykKKyAgICAgICAgeWllbGQgZGF0YQorICAgICAgICBpZiBoYXNhdHRyKGRhdGEsICdfX3NldHN0YXRlX18nKToKKyAgICAgICAgICAgIHN0YXRlID0gc2VsZi5jb25zdHJ1Y3RfbWFwcGluZyhub2RlLCBkZWVwPVRydWUpCisgICAgICAgICAgICBkYXRhLl9fc2V0c3RhdGVfXyhzdGF0ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXRlID0gc2VsZi5jb25zdHJ1Y3RfbWFwcGluZyhub2RlKQorICAgICAgICAgICAgZGF0YS5fX2RpY3RfXy51cGRhdGUoc3RhdGUpCisKKyAgICBkZWYgY29uc3RydWN0X3VuZGVmaW5lZChzZWxmLCBub2RlKToKKyAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcihOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGV0ZXJtaW5lIGEgY29uc3RydWN0b3IgZm9yIHRoZSB0YWcgJXIiICUgbm9kZS50YWcsCisgICAgICAgICAgICAgICAgbm9kZS5zdGFydF9tYXJrKQorCitTYWZlQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6bnVsbCcsCisgICAgICAgIFNhZmVDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfeWFtbF9udWxsKQorCitTYWZlQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsCisgICAgICAgIFNhZmVDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfeWFtbF9ib29sKQorCitTYWZlQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6aW50JywKKyAgICAgICAgU2FmZUNvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX2ludCkKKworU2FmZUNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAgICAgJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JywKKyAgICAgICAgU2FmZUNvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX2Zsb2F0KQorCitTYWZlQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5JywKKyAgICAgICAgU2FmZUNvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX2JpbmFyeSkKKworU2FmZUNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCcsCisgICAgICAgIFNhZmVDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfeWFtbF90aW1lc3RhbXApCisKK1NhZmVDb25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoCisgICAgICAgICd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJywKKyAgICAgICAgU2FmZUNvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX29tYXApCisKK1NhZmVDb25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoCisgICAgICAgICd0YWc6eWFtbC5vcmcsMjAwMjpwYWlycycsCisgICAgICAgIFNhZmVDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfeWFtbF9wYWlycykKKworU2FmZUNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnNldCcsCisgICAgICAgIFNhZmVDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfeWFtbF9zZXQpCisKK1NhZmVDb25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoCisgICAgICAgICd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLAorICAgICAgICBTYWZlQ29uc3RydWN0b3IuY29uc3RydWN0X3lhbWxfc3RyKQorCitTYWZlQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6c2VxJywKKyAgICAgICAgU2FmZUNvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX3NlcSkKKworU2FmZUNvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAgICAgJ3RhZzp5YW1sLm9yZywyMDAyOm1hcCcsCisgICAgICAgIFNhZmVDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfeWFtbF9tYXApCisKK1NhZmVDb25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoTm9uZSwKKyAgICAgICAgU2FmZUNvbnN0cnVjdG9yLmNvbnN0cnVjdF91bmRlZmluZWQpCisKK2NsYXNzIEZ1bGxDb25zdHJ1Y3RvcihTYWZlQ29uc3RydWN0b3IpOgorICAgICMgJ2V4dGVuZCcgaXMgYmxhY2tsaXN0ZWQgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5CisgICAgIyBjb25zdHJ1Y3RfcHl0aG9uX29iamVjdF9hcHBseSB0byBhZGQgYGxpc3RpdGVtc2AgdG8gYSBuZXdseSBnZW5lcmF0ZQorICAgICMgcHl0aG9uIGluc3RhbmNlCisgICAgZGVmIGdldF9zdGF0ZV9rZXlzX2JsYWNrbGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIFsnXmV4dGVuZCQnLCAnXl9fLipfXyQnXQorCisgICAgZGVmIGdldF9zdGF0ZV9rZXlzX2JsYWNrbGlzdF9yZWdleHAoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdzdGF0ZV9rZXlzX2JsYWNrbGlzdF9yZWdleHAnKToKKyAgICAgICAgICAgIHNlbGYuc3RhdGVfa2V5c19ibGFja2xpc3RfcmVnZXhwID0gcmUuY29tcGlsZSgnKCcgKyAnfCcuam9pbihzZWxmLmdldF9zdGF0ZV9rZXlzX2JsYWNrbGlzdCgpKSArICcpJykKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGVfa2V5c19ibGFja2xpc3RfcmVnZXhwCisKKyAgICBkZWYgY29uc3RydWN0X3B5dGhvbl9zdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbnN0cnVjdF9zY2FsYXIobm9kZSkKKworICAgIGRlZiBjb25zdHJ1Y3RfcHl0aG9uX3VuaWNvZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbnN0cnVjdF9zY2FsYXIobm9kZSkKKworICAgIGRlZiBjb25zdHJ1Y3RfcHl0aG9uX2J5dGVzKHNlbGYsIG5vZGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuY29uc3RydWN0X3NjYWxhcihub2RlKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gY29udmVydCBiYXNlNjQgZGF0YSBpbnRvIGFzY2lpOiAlcyIgJSBleGMsCisgICAgICAgICAgICAgICAgICAgIG5vZGUuc3RhcnRfbWFyaykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaGFzYXR0cihiYXNlNjQsICdkZWNvZGVieXRlcycpOgorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjQuZGVjb2RlYnl0ZXModmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjQuZGVjb2Rlc3RyaW5nKHZhbHVlKQorICAgICAgICBleGNlcHQgYmluYXNjaWkuRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcihOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGRlY29kZSBiYXNlNjQgZGF0YTogJXMiICUgZXhjLCBub2RlLnN0YXJ0X21hcmspCisKKyAgICBkZWYgY29uc3RydWN0X3B5dGhvbl9sb25nKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25zdHJ1Y3RfeWFtbF9pbnQobm9kZSkKKworICAgIGRlZiBjb25zdHJ1Y3RfcHl0aG9uX2NvbXBsZXgoc2VsZiwgbm9kZSk6CisgICAgICAgcmV0dXJuIGNvbXBsZXgoc2VsZi5jb25zdHJ1Y3Rfc2NhbGFyKG5vZGUpKQorCisgICAgZGVmIGNvbnN0cnVjdF9weXRob25fdHVwbGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiB0dXBsZShzZWxmLmNvbnN0cnVjdF9zZXF1ZW5jZShub2RlKSkKKworICAgIGRlZiBmaW5kX3B5dGhvbl9tb2R1bGUoc2VsZiwgbmFtZSwgbWFyaywgdW5zYWZlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKCJ3aGlsZSBjb25zdHJ1Y3RpbmcgYSBQeXRob24gbW9kdWxlIiwgbWFyaywKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG5vbi1lbXB0eSBuYW1lIGFwcGVuZGVkIHRvIHRoZSB0YWciLCBtYXJrKQorICAgICAgICBpZiB1bnNhZmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKCJ3aGlsZSBjb25zdHJ1Y3RpbmcgYSBQeXRob24gbW9kdWxlIiwgbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZmluZCBtb2R1bGUgJXIgKCVzKSIgJSAobmFtZSwgZXhjKSwgbWFyaykKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKCJ3aGlsZSBjb25zdHJ1Y3RpbmcgYSBQeXRob24gbW9kdWxlIiwgbWFyaywKKyAgICAgICAgICAgICAgICAgICAgIm1vZHVsZSAlciBpcyBub3QgaW1wb3J0ZWQiICUgbmFtZSwgbWFyaykKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCisKKyAgICBkZWYgZmluZF9weXRob25fbmFtZShzZWxmLCBuYW1lLCBtYXJrLCB1bnNhZmU9RmFsc2UpOgorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyBhIFB5dGhvbiBvYmplY3QiLCBtYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgbm9uLWVtcHR5IG5hbWUgYXBwZW5kZWQgdG8gdGhlIHRhZyIsIG1hcmspCisgICAgICAgIGlmICcuJyBpbiBuYW1lOgorICAgICAgICAgICAgbW9kdWxlX25hbWUsIG9iamVjdF9uYW1lID0gbmFtZS5yc3BsaXQoJy4nLCAxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnYnVpbHRpbnMnCisgICAgICAgICAgICBvYmplY3RfbmFtZSA9IG5hbWUKKyAgICAgICAgaWYgdW5zYWZlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlX25hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyBhIFB5dGhvbiBvYmplY3QiLCBtYXJrLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBmaW5kIG1vZHVsZSAlciAoJXMpIiAlIChtb2R1bGVfbmFtZSwgZXhjKSwgbWFyaykKKyAgICAgICAgaWYgbW9kdWxlX25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcigid2hpbGUgY29uc3RydWN0aW5nIGEgUHl0aG9uIG9iamVjdCIsIG1hcmssCisgICAgICAgICAgICAgICAgICAgICJtb2R1bGUgJXIgaXMgbm90IGltcG9ydGVkIiAlIG1vZHVsZV9uYW1lLCBtYXJrKQorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKyAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCBvYmplY3RfbmFtZSk6CisgICAgICAgICAgICByYWlzZSBDb25zdHJ1Y3RvckVycm9yKCJ3aGlsZSBjb25zdHJ1Y3RpbmcgYSBQeXRob24gb2JqZWN0IiwgbWFyaywKKyAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBmaW5kICVyIGluIHRoZSBtb2R1bGUgJXIiCisgICAgICAgICAgICAgICAgICAgICUgKG9iamVjdF9uYW1lLCBtb2R1bGUuX19uYW1lX18pLCBtYXJrKQorICAgICAgICByZXR1cm4gZ2V0YXR0cihtb2R1bGUsIG9iamVjdF9uYW1lKQorCisgICAgZGVmIGNvbnN0cnVjdF9weXRob25fbmFtZShzZWxmLCBzdWZmaXgsIG5vZGUpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuY29uc3RydWN0X3NjYWxhcihub2RlKQorICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyBhIFB5dGhvbiBuYW1lIiwgbm9kZS5zdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdGhlIGVtcHR5IHZhbHVlLCBidXQgZm91bmQgJXIiICUgdmFsdWUsIG5vZGUuc3RhcnRfbWFyaykKKyAgICAgICAgcmV0dXJuIHNlbGYuZmluZF9weXRob25fbmFtZShzdWZmaXgsIG5vZGUuc3RhcnRfbWFyaykKKworICAgIGRlZiBjb25zdHJ1Y3RfcHl0aG9uX21vZHVsZShzZWxmLCBzdWZmaXgsIG5vZGUpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuY29uc3RydWN0X3NjYWxhcihub2RlKQorICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgIHJhaXNlIENvbnN0cnVjdG9yRXJyb3IoIndoaWxlIGNvbnN0cnVjdGluZyBhIFB5dGhvbiBtb2R1bGUiLCBub2RlLnN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB0aGUgZW1wdHkgdmFsdWUsIGJ1dCBmb3VuZCAlciIgJSB2YWx1ZSwgbm9kZS5zdGFydF9tYXJrKQorICAgICAgICByZXR1cm4gc2VsZi5maW5kX3B5dGhvbl9tb2R1bGUoc3VmZml4LCBub2RlLnN0YXJ0X21hcmspCisKKyAgICBkZWYgbWFrZV9weXRob25faW5zdGFuY2Uoc2VsZiwgc3VmZml4LCBub2RlLAorICAgICAgICAgICAgYXJncz1Ob25lLCBrd2RzPU5vbmUsIG5ld29iaj1GYWxzZSwgdW5zYWZlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICBhcmdzID0gW10KKyAgICAgICAgaWYgbm90IGt3ZHM6CisgICAgICAgICAgICBrd2RzID0ge30KKyAgICAgICAgY2xzID0gc2VsZi5maW5kX3B5dGhvbl9uYW1lKHN1ZmZpeCwgbm9kZS5zdGFydF9tYXJrKQorICAgICAgICBpZiBub3QgKHVuc2FmZSBvciBpc2luc3RhbmNlKGNscywgdHlwZSkpOgorICAgICAgICAgICAgcmFpc2UgQ29uc3RydWN0b3JFcnJvcigid2hpbGUgY29uc3RydWN0aW5nIGEgUHl0aG9uIGluc3RhbmNlIiwgbm9kZS5zdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBjbGFzcywgYnV0IGZvdW5kICVyIiAlIHR5cGUoY2xzKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5zdGFydF9tYXJrKQorICAgICAgICBpZiBuZXdvYmogYW5kIGlzaW5zdGFuY2UoY2xzLCB0eXBlKToKKyAgICAgICAgICAgIHJldHVybiBjbHMuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3ZHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY2xzKCphcmdzLCAqKmt3ZHMpCisKKyAgICBkZWYgc2V0X3B5dGhvbl9pbnN0YW5jZV9zdGF0ZShzZWxmLCBpbnN0YW5jZSwgc3RhdGUsIHVuc2FmZT1GYWxzZSk6CisgICAgICAgIGlmIGhhc2F0dHIoaW5zdGFuY2UsICdfX3NldHN0YXRlX18nKToKKyAgICAgICAgICAgIGluc3RhbmNlLl9fc2V0c3RhdGVfXyhzdGF0ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNsb3RzdGF0ZSA9IHt9CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHN0YXRlLCB0dXBsZSkgYW5kIGxlbihzdGF0ZSkgPT0gMjoKKyAgICAgICAgICAgICAgICBzdGF0ZSwgc2xvdHN0YXRlID0gc3RhdGUKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoaW5zdGFuY2UsICdfX2RpY3RfXycpOgorICAgICAgICAgICAgICAgIGlmIG5vdCB1bnNhZmUgYW5kIHN0YXRlOgorICAgICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHN0YXRlLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RhdGVfa2V5KGtleSkKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpY3RfXy51cGRhdGUoc3RhdGUpCisgICAgICAgICAgICBlbGlmIHN0YXRlOgorICAgICAgICAgICAgICAgIHNsb3RzdGF0ZS51cGRhdGUoc3RhdGUpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzbG90c3RhdGUuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBub3QgdW5zYWZlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXRlX2tleShrZXkpCisgICAgICAgICAgICAgICAgc2V0YXR0cihpbnN0YW5jZSwga2V5LCB2YWx1ZSkKKworICAgIGRlZiBjb25zdHJ1Y3RfcHl0aG9uX29iamVjdChzZWxmLCBzdWZmaXgsIG5vZGUpOgorICAgICAgICAjIEZvcm1hdDoKKyAgICAgICAgIyAgICEhcHl0aG9uL29iamVjdDptb2R1bGUubmFtZSB7IC4uLiBzdGF0ZSAuLi4gfQorICAgICAgICBpbnN0YW5jZSA9IHNlbGYubWFrZV9weXRob25faW5zdGFuY2Uoc3VmZml4LCBub2RlLCBuZXdvYmo9VHJ1ZSkKKyAgICAgICAgeWllbGQgaW5zdGFuY2UKKyAgICAgICAgZGVlcCA9IGhhc2F0dHIoaW5zdGFuY2UsICdfX3NldHN0YXRlX18nKQorICAgICAgICBzdGF0ZSA9IHNlbGYuY29uc3RydWN0X21hcHBpbmcobm9kZSwgZGVlcD1kZWVwKQorICAgICAgICBzZWxmLnNldF9weXRob25faW5zdGFuY2Vfc3RhdGUoaW5zdGFuY2UsIHN0YXRlKQorCisgICAgZGVmIGNvbnN0cnVjdF9weXRob25fb2JqZWN0X2FwcGx5KHNlbGYsIHN1ZmZpeCwgbm9kZSwgbmV3b2JqPUZhbHNlKToKKyAgICAgICAgIyBGb3JtYXQ6CisgICAgICAgICMgICAhIXB5dGhvbi9vYmplY3QvYXBwbHkgICAgICAgIyAob3IgISFweXRob24vb2JqZWN0L25ldykKKyAgICAgICAgIyAgIGFyZ3M6IFsgLi4uIGFyZ3VtZW50cyAuLi4gXQorICAgICAgICAjICAga3dkczogeyAuLi4ga2V5d29yZHMgLi4uIH0KKyAgICAgICAgIyAgIHN0YXRlOiAuLi4gc3RhdGUgLi4uCisgICAgICAgICMgICBsaXN0aXRlbXM6IFsgLi4uIGxpc3RpdGVtcyAuLi4gXQorICAgICAgICAjICAgZGljdGl0ZW1zOiB7IC4uLiBkaWN0aXRlbXMgLi4uIH0KKyAgICAgICAgIyBvciBzaG9ydCBmb3JtYXQ6CisgICAgICAgICMgICAhIXB5dGhvbi9vYmplY3QvYXBwbHkgWyAuLi4gYXJndW1lbnRzIC4uLiBdCisgICAgICAgICMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAhIXB5dGhvbi9vYmplY3QvYXBwbHkgYW5kICEhcHl0aG9uL29iamVjdC9uZXcKKyAgICAgICAgIyBpcyBob3cgYW4gb2JqZWN0IGlzIGNyZWF0ZWQsIGNoZWNrIG1ha2VfcHl0aG9uX2luc3RhbmNlIGZvciBkZXRhaWxzLgorICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIFNlcXVlbmNlTm9kZSk6CisgICAgICAgICAgICBhcmdzID0gc2VsZi5jb25zdHJ1Y3Rfc2VxdWVuY2Uobm9kZSwgZGVlcD1UcnVlKQorICAgICAgICAgICAga3dkcyA9IHt9CisgICAgICAgICAgICBzdGF0ZSA9IHt9CisgICAgICAgICAgICBsaXN0aXRlbXMgPSBbXQorICAgICAgICAgICAgZGljdGl0ZW1zID0ge30KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5jb25zdHJ1Y3RfbWFwcGluZyhub2RlLCBkZWVwPVRydWUpCisgICAgICAgICAgICBhcmdzID0gdmFsdWUuZ2V0KCdhcmdzJywgW10pCisgICAgICAgICAgICBrd2RzID0gdmFsdWUuZ2V0KCdrd2RzJywge30pCisgICAgICAgICAgICBzdGF0ZSA9IHZhbHVlLmdldCgnc3RhdGUnLCB7fSkKKyAgICAgICAgICAgIGxpc3RpdGVtcyA9IHZhbHVlLmdldCgnbGlzdGl0ZW1zJywgW10pCisgICAgICAgICAgICBkaWN0aXRlbXMgPSB2YWx1ZS5nZXQoJ2RpY3RpdGVtcycsIHt9KQorICAgICAgICBpbnN0YW5jZSA9IHNlbGYubWFrZV9weXRob25faW5zdGFuY2Uoc3VmZml4LCBub2RlLCBhcmdzLCBrd2RzLCBuZXdvYmopCisgICAgICAgIGlmIHN0YXRlOgorICAgICAgICAgICAgc2VsZi5zZXRfcHl0aG9uX2luc3RhbmNlX3N0YXRlKGluc3RhbmNlLCBzdGF0ZSkKKyAgICAgICAgaWYgbGlzdGl0ZW1zOgorICAgICAgICAgICAgaW5zdGFuY2UuZXh0ZW5kKGxpc3RpdGVtcykKKyAgICAgICAgaWYgZGljdGl0ZW1zOgorICAgICAgICAgICAgZm9yIGtleSBpbiBkaWN0aXRlbXM6CisgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGRpY3RpdGVtc1trZXldCisgICAgICAgIHJldHVybiBpbnN0YW5jZQorCisgICAgZGVmIGNvbnN0cnVjdF9weXRob25fb2JqZWN0X25ldyhzZWxmLCBzdWZmaXgsIG5vZGUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25zdHJ1Y3RfcHl0aG9uX29iamVjdF9hcHBseShzdWZmaXgsIG5vZGUsIG5ld29iaj1UcnVlKQorCitGdWxsQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKAorICAgICd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vbm9uZScsCisgICAgRnVsbENvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX251bGwpCisKK0Z1bGxDb25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoCisgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnB5dGhvbi9ib29sJywKKyAgICBGdWxsQ29uc3RydWN0b3IuY29uc3RydWN0X3lhbWxfYm9vbCkKKworRnVsbENvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL3N0cicsCisgICAgRnVsbENvbnN0cnVjdG9yLmNvbnN0cnVjdF9weXRob25fc3RyKQorCitGdWxsQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKAorICAgICd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vdW5pY29kZScsCisgICAgRnVsbENvbnN0cnVjdG9yLmNvbnN0cnVjdF9weXRob25fdW5pY29kZSkKKworRnVsbENvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL2J5dGVzJywKKyAgICBGdWxsQ29uc3RydWN0b3IuY29uc3RydWN0X3B5dGhvbl9ieXRlcykKKworRnVsbENvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL2ludCcsCisgICAgRnVsbENvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX2ludCkKKworRnVsbENvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL2xvbmcnLAorICAgIEZ1bGxDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfcHl0aG9uX2xvbmcpCisKK0Z1bGxDb25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoCisgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnB5dGhvbi9mbG9hdCcsCisgICAgRnVsbENvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX2Zsb2F0KQorCitGdWxsQ29uc3RydWN0b3IuYWRkX2NvbnN0cnVjdG9yKAorICAgICd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vY29tcGxleCcsCisgICAgRnVsbENvbnN0cnVjdG9yLmNvbnN0cnVjdF9weXRob25fY29tcGxleCkKKworRnVsbENvbnN0cnVjdG9yLmFkZF9jb25zdHJ1Y3RvcigKKyAgICAndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL2xpc3QnLAorICAgIEZ1bGxDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfeWFtbF9zZXEpCisKK0Z1bGxDb25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoCisgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnB5dGhvbi90dXBsZScsCisgICAgRnVsbENvbnN0cnVjdG9yLmNvbnN0cnVjdF9weXRob25fdHVwbGUpCisKK0Z1bGxDb25zdHJ1Y3Rvci5hZGRfY29uc3RydWN0b3IoCisgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnB5dGhvbi9kaWN0JywKKyAgICBGdWxsQ29uc3RydWN0b3IuY29uc3RydWN0X3lhbWxfbWFwKQorCitGdWxsQ29uc3RydWN0b3IuYWRkX211bHRpX2NvbnN0cnVjdG9yKAorICAgICd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vbmFtZTonLAorICAgIEZ1bGxDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfcHl0aG9uX25hbWUpCisKK2NsYXNzIFVuc2FmZUNvbnN0cnVjdG9yKEZ1bGxDb25zdHJ1Y3Rvcik6CisKKyAgICBkZWYgZmluZF9weXRob25fbW9kdWxlKHNlbGYsIG5hbWUsIG1hcmspOgorICAgICAgICByZXR1cm4gc3VwZXIoVW5zYWZlQ29uc3RydWN0b3IsIHNlbGYpLmZpbmRfcHl0aG9uX21vZHVsZShuYW1lLCBtYXJrLCB1bnNhZmU9VHJ1ZSkKKworICAgIGRlZiBmaW5kX3B5dGhvbl9uYW1lKHNlbGYsIG5hbWUsIG1hcmspOgorICAgICAgICByZXR1cm4gc3VwZXIoVW5zYWZlQ29uc3RydWN0b3IsIHNlbGYpLmZpbmRfcHl0aG9uX25hbWUobmFtZSwgbWFyaywgdW5zYWZlPVRydWUpCisKKyAgICBkZWYgbWFrZV9weXRob25faW5zdGFuY2Uoc2VsZiwgc3VmZml4LCBub2RlLCBhcmdzPU5vbmUsIGt3ZHM9Tm9uZSwgbmV3b2JqPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFVuc2FmZUNvbnN0cnVjdG9yLCBzZWxmKS5tYWtlX3B5dGhvbl9pbnN0YW5jZSgKKyAgICAgICAgICAgIHN1ZmZpeCwgbm9kZSwgYXJncywga3dkcywgbmV3b2JqLCB1bnNhZmU9VHJ1ZSkKKworICAgIGRlZiBzZXRfcHl0aG9uX2luc3RhbmNlX3N0YXRlKHNlbGYsIGluc3RhbmNlLCBzdGF0ZSk6CisgICAgICAgIHJldHVybiBzdXBlcihVbnNhZmVDb25zdHJ1Y3Rvciwgc2VsZikuc2V0X3B5dGhvbl9pbnN0YW5jZV9zdGF0ZSgKKyAgICAgICAgICAgIGluc3RhbmNlLCBzdGF0ZSwgdW5zYWZlPVRydWUpCisKK1Vuc2FmZUNvbnN0cnVjdG9yLmFkZF9tdWx0aV9jb25zdHJ1Y3RvcigKKyAgICAndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL21vZHVsZTonLAorICAgIFVuc2FmZUNvbnN0cnVjdG9yLmNvbnN0cnVjdF9weXRob25fbW9kdWxlKQorCitVbnNhZmVDb25zdHJ1Y3Rvci5hZGRfbXVsdGlfY29uc3RydWN0b3IoCisgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnB5dGhvbi9vYmplY3Q6JywKKyAgICBVbnNhZmVDb25zdHJ1Y3Rvci5jb25zdHJ1Y3RfcHl0aG9uX29iamVjdCkKKworVW5zYWZlQ29uc3RydWN0b3IuYWRkX211bHRpX2NvbnN0cnVjdG9yKAorICAgICd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vb2JqZWN0L25ldzonLAorICAgIFVuc2FmZUNvbnN0cnVjdG9yLmNvbnN0cnVjdF9weXRob25fb2JqZWN0X25ldykKKworVW5zYWZlQ29uc3RydWN0b3IuYWRkX211bHRpX2NvbnN0cnVjdG9yKAorICAgICd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vb2JqZWN0L2FwcGx5OicsCisgICAgVW5zYWZlQ29uc3RydWN0b3IuY29uc3RydWN0X3B5dGhvbl9vYmplY3RfYXBwbHkpCisKKyMgQ29uc3RydWN0b3IgaXMgc2FtZSBhcyBVbnNhZmVDb25zdHJ1Y3Rvci4gTmVlZCB0byBsZWF2ZSB0aGlzIGluIHBsYWNlIGluIGNhc2UKKyMgcGVvcGxlIGhhdmUgZXh0ZW5kZWQgaXQgZGlyZWN0bHkuCitjbGFzcyBDb25zdHJ1Y3RvcihVbnNhZmVDb25zdHJ1Y3Rvcik6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvY3lhbWwucHkgYi9saWIveWFtbC9jeWFtbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzIxMzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvY3lhbWwucHkKQEAgLTAsMCArMSwxMDEgQEAKKworX19hbGxfXyA9IFsKKyAgICAnQ0Jhc2VMb2FkZXInLCAnQ1NhZmVMb2FkZXInLCAnQ0Z1bGxMb2FkZXInLCAnQ1Vuc2FmZUxvYWRlcicsICdDTG9hZGVyJywKKyAgICAnQ0Jhc2VEdW1wZXInLCAnQ1NhZmVEdW1wZXInLCAnQ0R1bXBlcicKK10KKworZnJvbSB5YW1sLl95YW1sIGltcG9ydCBDUGFyc2VyLCBDRW1pdHRlcgorCitmcm9tIC5jb25zdHJ1Y3RvciBpbXBvcnQgKgorCitmcm9tIC5zZXJpYWxpemVyIGltcG9ydCAqCitmcm9tIC5yZXByZXNlbnRlciBpbXBvcnQgKgorCitmcm9tIC5yZXNvbHZlciBpbXBvcnQgKgorCitjbGFzcyBDQmFzZUxvYWRlcihDUGFyc2VyLCBCYXNlQ29uc3RydWN0b3IsIEJhc2VSZXNvbHZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtKToKKyAgICAgICAgQ1BhcnNlci5fX2luaXRfXyhzZWxmLCBzdHJlYW0pCisgICAgICAgIEJhc2VDb25zdHJ1Y3Rvci5fX2luaXRfXyhzZWxmKQorICAgICAgICBCYXNlUmVzb2x2ZXIuX19pbml0X18oc2VsZikKKworY2xhc3MgQ1NhZmVMb2FkZXIoQ1BhcnNlciwgU2FmZUNvbnN0cnVjdG9yLCBSZXNvbHZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtKToKKyAgICAgICAgQ1BhcnNlci5fX2luaXRfXyhzZWxmLCBzdHJlYW0pCisgICAgICAgIFNhZmVDb25zdHJ1Y3Rvci5fX2luaXRfXyhzZWxmKQorICAgICAgICBSZXNvbHZlci5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBDRnVsbExvYWRlcihDUGFyc2VyLCBGdWxsQ29uc3RydWN0b3IsIFJlc29sdmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBDUGFyc2VyLl9faW5pdF9fKHNlbGYsIHN0cmVhbSkKKyAgICAgICAgRnVsbENvbnN0cnVjdG9yLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFJlc29sdmVyLl9faW5pdF9fKHNlbGYpCisKK2NsYXNzIENVbnNhZmVMb2FkZXIoQ1BhcnNlciwgVW5zYWZlQ29uc3RydWN0b3IsIFJlc29sdmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBDUGFyc2VyLl9faW5pdF9fKHNlbGYsIHN0cmVhbSkKKyAgICAgICAgVW5zYWZlQ29uc3RydWN0b3IuX19pbml0X18oc2VsZikKKyAgICAgICAgUmVzb2x2ZXIuX19pbml0X18oc2VsZikKKworY2xhc3MgQ0xvYWRlcihDUGFyc2VyLCBDb25zdHJ1Y3RvciwgUmVzb2x2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSk6CisgICAgICAgIENQYXJzZXIuX19pbml0X18oc2VsZiwgc3RyZWFtKQorICAgICAgICBDb25zdHJ1Y3Rvci5fX2luaXRfXyhzZWxmKQorICAgICAgICBSZXNvbHZlci5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBDQmFzZUR1bXBlcihDRW1pdHRlciwgQmFzZVJlcHJlc2VudGVyLCBCYXNlUmVzb2x2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwKKyAgICAgICAgICAgIGRlZmF1bHRfc3R5bGU9Tm9uZSwgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlLAorICAgICAgICAgICAgY2Fub25pY2FsPU5vbmUsIGluZGVudD1Ob25lLCB3aWR0aD1Ob25lLAorICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1Ob25lLCBsaW5lX2JyZWFrPU5vbmUsCisgICAgICAgICAgICBlbmNvZGluZz1Ob25lLCBleHBsaWNpdF9zdGFydD1Ob25lLCBleHBsaWNpdF9lbmQ9Tm9uZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwgdGFncz1Ob25lLCBzb3J0X2tleXM9VHJ1ZSk6CisgICAgICAgIENFbWl0dGVyLl9faW5pdF9fKHNlbGYsIHN0cmVhbSwgY2Fub25pY2FsPWNhbm9uaWNhbCwKKyAgICAgICAgICAgICAgICBpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZW5jb2Rpbmc9ZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1hbGxvd191bmljb2RlLCBsaW5lX2JyZWFrPWxpbmVfYnJlYWssCisgICAgICAgICAgICAgICAgZXhwbGljaXRfc3RhcnQ9ZXhwbGljaXRfc3RhcnQsIGV4cGxpY2l0X2VuZD1leHBsaWNpdF9lbmQsCisgICAgICAgICAgICAgICAgdmVyc2lvbj12ZXJzaW9uLCB0YWdzPXRhZ3MpCisgICAgICAgIFJlcHJlc2VudGVyLl9faW5pdF9fKHNlbGYsIGRlZmF1bHRfc3R5bGU9ZGVmYXVsdF9zdHlsZSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0X2Zsb3dfc3R5bGU9ZGVmYXVsdF9mbG93X3N0eWxlLCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAgICBSZXNvbHZlci5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBDU2FmZUR1bXBlcihDRW1pdHRlciwgU2FmZVJlcHJlc2VudGVyLCBSZXNvbHZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLAorICAgICAgICAgICAgZGVmYXVsdF9zdHlsZT1Ob25lLCBkZWZhdWx0X2Zsb3dfc3R5bGU9RmFsc2UsCisgICAgICAgICAgICBjYW5vbmljYWw9Tm9uZSwgaW5kZW50PU5vbmUsIHdpZHRoPU5vbmUsCisgICAgICAgICAgICBhbGxvd191bmljb2RlPU5vbmUsIGxpbmVfYnJlYWs9Tm9uZSwKKyAgICAgICAgICAgIGVuY29kaW5nPU5vbmUsIGV4cGxpY2l0X3N0YXJ0PU5vbmUsIGV4cGxpY2l0X2VuZD1Ob25lLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLCB0YWdzPU5vbmUsIHNvcnRfa2V5cz1UcnVlKToKKyAgICAgICAgQ0VtaXR0ZXIuX19pbml0X18oc2VsZiwgc3RyZWFtLCBjYW5vbmljYWw9Y2Fub25pY2FsLAorICAgICAgICAgICAgICAgIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBlbmNvZGluZz1lbmNvZGluZywKKyAgICAgICAgICAgICAgICBhbGxvd191bmljb2RlPWFsbG93X3VuaWNvZGUsIGxpbmVfYnJlYWs9bGluZV9icmVhaywKKyAgICAgICAgICAgICAgICBleHBsaWNpdF9zdGFydD1leHBsaWNpdF9zdGFydCwgZXhwbGljaXRfZW5kPWV4cGxpY2l0X2VuZCwKKyAgICAgICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24sIHRhZ3M9dGFncykKKyAgICAgICAgU2FmZVJlcHJlc2VudGVyLl9faW5pdF9fKHNlbGYsIGRlZmF1bHRfc3R5bGU9ZGVmYXVsdF9zdHlsZSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0X2Zsb3dfc3R5bGU9ZGVmYXVsdF9mbG93X3N0eWxlLCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAgICBSZXNvbHZlci5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBDRHVtcGVyKENFbWl0dGVyLCBTZXJpYWxpemVyLCBSZXByZXNlbnRlciwgUmVzb2x2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwKKyAgICAgICAgICAgIGRlZmF1bHRfc3R5bGU9Tm9uZSwgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlLAorICAgICAgICAgICAgY2Fub25pY2FsPU5vbmUsIGluZGVudD1Ob25lLCB3aWR0aD1Ob25lLAorICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1Ob25lLCBsaW5lX2JyZWFrPU5vbmUsCisgICAgICAgICAgICBlbmNvZGluZz1Ob25lLCBleHBsaWNpdF9zdGFydD1Ob25lLCBleHBsaWNpdF9lbmQ9Tm9uZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwgdGFncz1Ob25lLCBzb3J0X2tleXM9VHJ1ZSk6CisgICAgICAgIENFbWl0dGVyLl9faW5pdF9fKHNlbGYsIHN0cmVhbSwgY2Fub25pY2FsPWNhbm9uaWNhbCwKKyAgICAgICAgICAgICAgICBpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZW5jb2Rpbmc9ZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1hbGxvd191bmljb2RlLCBsaW5lX2JyZWFrPWxpbmVfYnJlYWssCisgICAgICAgICAgICAgICAgZXhwbGljaXRfc3RhcnQ9ZXhwbGljaXRfc3RhcnQsIGV4cGxpY2l0X2VuZD1leHBsaWNpdF9lbmQsCisgICAgICAgICAgICAgICAgdmVyc2lvbj12ZXJzaW9uLCB0YWdzPXRhZ3MpCisgICAgICAgIFJlcHJlc2VudGVyLl9faW5pdF9fKHNlbGYsIGRlZmF1bHRfc3R5bGU9ZGVmYXVsdF9zdHlsZSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0X2Zsb3dfc3R5bGU9ZGVmYXVsdF9mbG93X3N0eWxlLCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAgICBSZXNvbHZlci5fX2luaXRfXyhzZWxmKQorCmRpZmYgLS1naXQgYS9saWIveWFtbC9kdW1wZXIucHkgYi9saWIveWFtbC9kdW1wZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhZGJhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi95YW1sL2R1bXBlci5weQpAQCAtMCwwICsxLDYyIEBACisKK19fYWxsX18gPSBbJ0Jhc2VEdW1wZXInLCAnU2FmZUR1bXBlcicsICdEdW1wZXInXQorCitmcm9tIC5lbWl0dGVyIGltcG9ydCAqCitmcm9tIC5zZXJpYWxpemVyIGltcG9ydCAqCitmcm9tIC5yZXByZXNlbnRlciBpbXBvcnQgKgorZnJvbSAucmVzb2x2ZXIgaW1wb3J0ICoKKworY2xhc3MgQmFzZUR1bXBlcihFbWl0dGVyLCBTZXJpYWxpemVyLCBCYXNlUmVwcmVzZW50ZXIsIEJhc2VSZXNvbHZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLAorICAgICAgICAgICAgZGVmYXVsdF9zdHlsZT1Ob25lLCBkZWZhdWx0X2Zsb3dfc3R5bGU9RmFsc2UsCisgICAgICAgICAgICBjYW5vbmljYWw9Tm9uZSwgaW5kZW50PU5vbmUsIHdpZHRoPU5vbmUsCisgICAgICAgICAgICBhbGxvd191bmljb2RlPU5vbmUsIGxpbmVfYnJlYWs9Tm9uZSwKKyAgICAgICAgICAgIGVuY29kaW5nPU5vbmUsIGV4cGxpY2l0X3N0YXJ0PU5vbmUsIGV4cGxpY2l0X2VuZD1Ob25lLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLCB0YWdzPU5vbmUsIHNvcnRfa2V5cz1UcnVlKToKKyAgICAgICAgRW1pdHRlci5fX2luaXRfXyhzZWxmLCBzdHJlYW0sIGNhbm9uaWNhbD1jYW5vbmljYWwsCisgICAgICAgICAgICAgICAgaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsCisgICAgICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1hbGxvd191bmljb2RlLCBsaW5lX2JyZWFrPWxpbmVfYnJlYWspCisgICAgICAgIFNlcmlhbGl6ZXIuX19pbml0X18oc2VsZiwgZW5jb2Rpbmc9ZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgZXhwbGljaXRfc3RhcnQ9ZXhwbGljaXRfc3RhcnQsIGV4cGxpY2l0X2VuZD1leHBsaWNpdF9lbmQsCisgICAgICAgICAgICAgICAgdmVyc2lvbj12ZXJzaW9uLCB0YWdzPXRhZ3MpCisgICAgICAgIFJlcHJlc2VudGVyLl9faW5pdF9fKHNlbGYsIGRlZmF1bHRfc3R5bGU9ZGVmYXVsdF9zdHlsZSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0X2Zsb3dfc3R5bGU9ZGVmYXVsdF9mbG93X3N0eWxlLCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAgICBSZXNvbHZlci5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBTYWZlRHVtcGVyKEVtaXR0ZXIsIFNlcmlhbGl6ZXIsIFNhZmVSZXByZXNlbnRlciwgUmVzb2x2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwKKyAgICAgICAgICAgIGRlZmF1bHRfc3R5bGU9Tm9uZSwgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlLAorICAgICAgICAgICAgY2Fub25pY2FsPU5vbmUsIGluZGVudD1Ob25lLCB3aWR0aD1Ob25lLAorICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1Ob25lLCBsaW5lX2JyZWFrPU5vbmUsCisgICAgICAgICAgICBlbmNvZGluZz1Ob25lLCBleHBsaWNpdF9zdGFydD1Ob25lLCBleHBsaWNpdF9lbmQ9Tm9uZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwgdGFncz1Ob25lLCBzb3J0X2tleXM9VHJ1ZSk6CisgICAgICAgIEVtaXR0ZXIuX19pbml0X18oc2VsZiwgc3RyZWFtLCBjYW5vbmljYWw9Y2Fub25pY2FsLAorICAgICAgICAgICAgICAgIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLAorICAgICAgICAgICAgICAgIGFsbG93X3VuaWNvZGU9YWxsb3dfdW5pY29kZSwgbGluZV9icmVhaz1saW5lX2JyZWFrKQorICAgICAgICBTZXJpYWxpemVyLl9faW5pdF9fKHNlbGYsIGVuY29kaW5nPWVuY29kaW5nLAorICAgICAgICAgICAgICAgIGV4cGxpY2l0X3N0YXJ0PWV4cGxpY2l0X3N0YXJ0LCBleHBsaWNpdF9lbmQ9ZXhwbGljaXRfZW5kLAorICAgICAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiwgdGFncz10YWdzKQorICAgICAgICBTYWZlUmVwcmVzZW50ZXIuX19pbml0X18oc2VsZiwgZGVmYXVsdF9zdHlsZT1kZWZhdWx0X3N0eWxlLAorICAgICAgICAgICAgICAgIGRlZmF1bHRfZmxvd19zdHlsZT1kZWZhdWx0X2Zsb3dfc3R5bGUsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAgIFJlc29sdmVyLl9faW5pdF9fKHNlbGYpCisKK2NsYXNzIER1bXBlcihFbWl0dGVyLCBTZXJpYWxpemVyLCBSZXByZXNlbnRlciwgUmVzb2x2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwKKyAgICAgICAgICAgIGRlZmF1bHRfc3R5bGU9Tm9uZSwgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlLAorICAgICAgICAgICAgY2Fub25pY2FsPU5vbmUsIGluZGVudD1Ob25lLCB3aWR0aD1Ob25lLAorICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1Ob25lLCBsaW5lX2JyZWFrPU5vbmUsCisgICAgICAgICAgICBlbmNvZGluZz1Ob25lLCBleHBsaWNpdF9zdGFydD1Ob25lLCBleHBsaWNpdF9lbmQ9Tm9uZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwgdGFncz1Ob25lLCBzb3J0X2tleXM9VHJ1ZSk6CisgICAgICAgIEVtaXR0ZXIuX19pbml0X18oc2VsZiwgc3RyZWFtLCBjYW5vbmljYWw9Y2Fub25pY2FsLAorICAgICAgICAgICAgICAgIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLAorICAgICAgICAgICAgICAgIGFsbG93X3VuaWNvZGU9YWxsb3dfdW5pY29kZSwgbGluZV9icmVhaz1saW5lX2JyZWFrKQorICAgICAgICBTZXJpYWxpemVyLl9faW5pdF9fKHNlbGYsIGVuY29kaW5nPWVuY29kaW5nLAorICAgICAgICAgICAgICAgIGV4cGxpY2l0X3N0YXJ0PWV4cGxpY2l0X3N0YXJ0LCBleHBsaWNpdF9lbmQ9ZXhwbGljaXRfZW5kLAorICAgICAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiwgdGFncz10YWdzKQorICAgICAgICBSZXByZXNlbnRlci5fX2luaXRfXyhzZWxmLCBkZWZhdWx0X3N0eWxlPWRlZmF1bHRfc3R5bGUsCisgICAgICAgICAgICAgICAgZGVmYXVsdF9mbG93X3N0eWxlPWRlZmF1bHRfZmxvd19zdHlsZSwgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgUmVzb2x2ZXIuX19pbml0X18oc2VsZikKKwpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvZW1pdHRlci5weSBiL2xpYi95YW1sL2VtaXR0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2NGQwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi95YW1sL2VtaXR0ZXIucHkKQEAgLTAsMCArMSwxMTM3IEBACisKKyMgRW1pdHRlciBleHBlY3RzIGV2ZW50cyBvYmV5aW5nIHRoZSBmb2xsb3dpbmcgZ3JhbW1hcjoKKyMgc3RyZWFtIDo6PSBTVFJFQU0tU1RBUlQgZG9jdW1lbnQqIFNUUkVBTS1FTkQKKyMgZG9jdW1lbnQgOjo9IERPQ1VNRU5ULVNUQVJUIG5vZGUgRE9DVU1FTlQtRU5ECisjIG5vZGUgOjo9IFNDQUxBUiB8IHNlcXVlbmNlIHwgbWFwcGluZworIyBzZXF1ZW5jZSA6Oj0gU0VRVUVOQ0UtU1RBUlQgbm9kZSogU0VRVUVOQ0UtRU5ECisjIG1hcHBpbmcgOjo9IE1BUFBJTkctU1RBUlQgKG5vZGUgbm9kZSkqIE1BUFBJTkctRU5ECisKK19fYWxsX18gPSBbJ0VtaXR0ZXInLCAnRW1pdHRlckVycm9yJ10KKworZnJvbSAuZXJyb3IgaW1wb3J0IFlBTUxFcnJvcgorZnJvbSAuZXZlbnRzIGltcG9ydCAqCisKK2NsYXNzIEVtaXR0ZXJFcnJvcihZQU1MRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgU2NhbGFyQW5hbHlzaXM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjYWxhciwgZW1wdHksIG11bHRpbGluZSwKKyAgICAgICAgICAgIGFsbG93X2Zsb3dfcGxhaW4sIGFsbG93X2Jsb2NrX3BsYWluLAorICAgICAgICAgICAgYWxsb3dfc2luZ2xlX3F1b3RlZCwgYWxsb3dfZG91YmxlX3F1b3RlZCwKKyAgICAgICAgICAgIGFsbG93X2Jsb2NrKToKKyAgICAgICAgc2VsZi5zY2FsYXIgPSBzY2FsYXIKKyAgICAgICAgc2VsZi5lbXB0eSA9IGVtcHR5CisgICAgICAgIHNlbGYubXVsdGlsaW5lID0gbXVsdGlsaW5lCisgICAgICAgIHNlbGYuYWxsb3dfZmxvd19wbGFpbiA9IGFsbG93X2Zsb3dfcGxhaW4KKyAgICAgICAgc2VsZi5hbGxvd19ibG9ja19wbGFpbiA9IGFsbG93X2Jsb2NrX3BsYWluCisgICAgICAgIHNlbGYuYWxsb3dfc2luZ2xlX3F1b3RlZCA9IGFsbG93X3NpbmdsZV9xdW90ZWQKKyAgICAgICAgc2VsZi5hbGxvd19kb3VibGVfcXVvdGVkID0gYWxsb3dfZG91YmxlX3F1b3RlZAorICAgICAgICBzZWxmLmFsbG93X2Jsb2NrID0gYWxsb3dfYmxvY2sKKworY2xhc3MgRW1pdHRlcjoKKworICAgIERFRkFVTFRfVEFHX1BSRUZJWEVTID0geworICAgICAgICAnIScgOiAnIScsCisgICAgICAgICd0YWc6eWFtbC5vcmcsMjAwMjonIDogJyEhJywKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLCBjYW5vbmljYWw9Tm9uZSwgaW5kZW50PU5vbmUsIHdpZHRoPU5vbmUsCisgICAgICAgICAgICBhbGxvd191bmljb2RlPU5vbmUsIGxpbmVfYnJlYWs9Tm9uZSk6CisKKyAgICAgICAgIyBUaGUgc3RyZWFtIHNob3VsZCBoYXZlIHRoZSBtZXRob2RzIGB3cml0ZWAgYW5kIHBvc3NpYmx5IGBmbHVzaGAuCisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisKKyAgICAgICAgIyBFbmNvZGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBTVFJFQU0tU1RBUlQuCisgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBOb25lCisKKyAgICAgICAgIyBFbWl0dGVyIGlzIGEgc3RhdGUgbWFjaGluZSB3aXRoIGEgc3RhY2sgb2Ygc3RhdGVzIHRvIGhhbmRsZSBuZXN0ZWQKKyAgICAgICAgIyBzdHJ1Y3R1cmVzLgorICAgICAgICBzZWxmLnN0YXRlcyA9IFtdCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmV4cGVjdF9zdHJlYW1fc3RhcnQKKworICAgICAgICAjIEN1cnJlbnQgZXZlbnQgYW5kIHRoZSBldmVudCBxdWV1ZS4KKyAgICAgICAgc2VsZi5ldmVudHMgPSBbXQorICAgICAgICBzZWxmLmV2ZW50ID0gTm9uZQorCisgICAgICAgICMgVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgYW5kIHRoZSBzdGFjayBvZiBwcmV2aW91cyBpbmRlbnRzLgorICAgICAgICBzZWxmLmluZGVudHMgPSBbXQorICAgICAgICBzZWxmLmluZGVudCA9IE5vbmUKKworICAgICAgICAjIEZsb3cgbGV2ZWwuCisgICAgICAgIHNlbGYuZmxvd19sZXZlbCA9IDAKKworICAgICAgICAjIENvbnRleHRzLgorICAgICAgICBzZWxmLnJvb3RfY29udGV4dCA9IEZhbHNlCisgICAgICAgIHNlbGYuc2VxdWVuY2VfY29udGV4dCA9IEZhbHNlCisgICAgICAgIHNlbGYubWFwcGluZ19jb250ZXh0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5zaW1wbGVfa2V5X2NvbnRleHQgPSBGYWxzZQorCisgICAgICAgICMgQ2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBsYXN0IGVtaXR0ZWQgY2hhcmFjdGVyOgorICAgICAgICAjICAtIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgICMgIC0gaXMgaXQgYSB3aGl0ZXNwYWNlPworICAgICAgICAjICAtIGlzIGl0IGFuIGluZGVudGlvbiBjaGFyYWN0ZXIKKyAgICAgICAgIyAgICAoaW5kZW50YXRpb24gc3BhY2UsICctJywgJz8nLCBvciAnOicpPworICAgICAgICBzZWxmLmxpbmUgPSAwCisgICAgICAgIHNlbGYuY29sdW1uID0gMAorICAgICAgICBzZWxmLndoaXRlc3BhY2UgPSBUcnVlCisgICAgICAgIHNlbGYuaW5kZW50aW9uID0gVHJ1ZQorCisgICAgICAgICMgV2hldGhlciB0aGUgZG9jdW1lbnQgcmVxdWlyZXMgYW4gZXhwbGljaXQgZG9jdW1lbnQgaW5kaWNhdG9yCisgICAgICAgIHNlbGYub3Blbl9lbmRlZCA9IEZhbHNlCisKKyAgICAgICAgIyBGb3JtYXR0aW5nIGRldGFpbHMuCisgICAgICAgIHNlbGYuY2Fub25pY2FsID0gY2Fub25pY2FsCisgICAgICAgIHNlbGYuYWxsb3dfdW5pY29kZSA9IGFsbG93X3VuaWNvZGUKKyAgICAgICAgc2VsZi5iZXN0X2luZGVudCA9IDIKKyAgICAgICAgaWYgaW5kZW50IGFuZCAxIDwgaW5kZW50IDwgMTA6CisgICAgICAgICAgICBzZWxmLmJlc3RfaW5kZW50ID0gaW5kZW50CisgICAgICAgIHNlbGYuYmVzdF93aWR0aCA9IDgwCisgICAgICAgIGlmIHdpZHRoIGFuZCB3aWR0aCA+IHNlbGYuYmVzdF9pbmRlbnQqMjoKKyAgICAgICAgICAgIHNlbGYuYmVzdF93aWR0aCA9IHdpZHRoCisgICAgICAgIHNlbGYuYmVzdF9saW5lX2JyZWFrID0gJ1xuJworICAgICAgICBpZiBsaW5lX2JyZWFrIGluIFsnXHInLCAnXG4nLCAnXHJcbiddOgorICAgICAgICAgICAgc2VsZi5iZXN0X2xpbmVfYnJlYWsgPSBsaW5lX2JyZWFrCisKKyAgICAgICAgIyBUYWcgcHJlZml4ZXMuCisgICAgICAgIHNlbGYudGFnX3ByZWZpeGVzID0gTm9uZQorCisgICAgICAgICMgUHJlcGFyZWQgYW5jaG9yIGFuZCB0YWcuCisgICAgICAgIHNlbGYucHJlcGFyZWRfYW5jaG9yID0gTm9uZQorICAgICAgICBzZWxmLnByZXBhcmVkX3RhZyA9IE5vbmUKKworICAgICAgICAjIFNjYWxhciBhbmFseXNpcyBhbmQgc3R5bGUuCisgICAgICAgIHNlbGYuYW5hbHlzaXMgPSBOb25lCisgICAgICAgIHNlbGYuc3R5bGUgPSBOb25lCisKKyAgICBkZWYgZGlzcG9zZShzZWxmKToKKyAgICAgICAgIyBSZXNldCB0aGUgc3RhdGUgYXR0cmlidXRlcyAodG8gY2xlYXIgc2VsZi1yZWZlcmVuY2VzKQorICAgICAgICBzZWxmLnN0YXRlcyA9IFtdCisgICAgICAgIHNlbGYuc3RhdGUgPSBOb25lCisKKyAgICBkZWYgZW1pdChzZWxmLCBldmVudCk6CisgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZChldmVudCkKKyAgICAgICAgd2hpbGUgbm90IHNlbGYubmVlZF9tb3JlX2V2ZW50cygpOgorICAgICAgICAgICAgc2VsZi5ldmVudCA9IHNlbGYuZXZlbnRzLnBvcCgwKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSgpCisgICAgICAgICAgICBzZWxmLmV2ZW50ID0gTm9uZQorCisgICAgIyBJbiBzb21lIGNhc2VzLCB3ZSB3YWl0IGZvciBhIGZldyBuZXh0IGV2ZW50cyBiZWZvcmUgZW1pdHRpbmcuCisKKyAgICBkZWYgbmVlZF9tb3JlX2V2ZW50cyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuZXZlbnRzOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXZlbnQgPSBzZWxmLmV2ZW50c1swXQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBEb2N1bWVudFN0YXJ0RXZlbnQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmVlZF9ldmVudHMoMSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBTZXF1ZW5jZVN0YXJ0RXZlbnQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmVlZF9ldmVudHMoMikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBNYXBwaW5nU3RhcnRFdmVudCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZWVkX2V2ZW50cygzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbmVlZF9ldmVudHMoc2VsZiwgY291bnQpOgorICAgICAgICBsZXZlbCA9IDAKKyAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzWzE6XToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChEb2N1bWVudFN0YXJ0RXZlbnQsIENvbGxlY3Rpb25TdGFydEV2ZW50KSk6CisgICAgICAgICAgICAgICAgbGV2ZWwgKz0gMQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCAoRG9jdW1lbnRFbmRFdmVudCwgQ29sbGVjdGlvbkVuZEV2ZW50KSk6CisgICAgICAgICAgICAgICAgbGV2ZWwgLT0gMQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBTdHJlYW1FbmRFdmVudCk6CisgICAgICAgICAgICAgICAgbGV2ZWwgPSAtMQorICAgICAgICAgICAgaWYgbGV2ZWwgPCAwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gKGxlbihzZWxmLmV2ZW50cykgPCBjb3VudCsxKQorCisgICAgZGVmIGluY3JlYXNlX2luZGVudChzZWxmLCBmbG93PUZhbHNlLCBpbmRlbnRsZXNzPUZhbHNlKToKKyAgICAgICAgc2VsZi5pbmRlbnRzLmFwcGVuZChzZWxmLmluZGVudCkKKyAgICAgICAgaWYgc2VsZi5pbmRlbnQgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGZsb3c6CisgICAgICAgICAgICAgICAgc2VsZi5pbmRlbnQgPSBzZWxmLmJlc3RfaW5kZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZW50ID0gMAorICAgICAgICBlbGlmIG5vdCBpbmRlbnRsZXNzOgorICAgICAgICAgICAgc2VsZi5pbmRlbnQgKz0gc2VsZi5iZXN0X2luZGVudAorCisgICAgIyBTdGF0ZXMuCisKKyAgICAjIFN0cmVhbSBoYW5kbGVycy4KKworICAgIGRlZiBleHBlY3Rfc3RyZWFtX3N0YXJ0KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIFN0cmVhbVN0YXJ0RXZlbnQpOgorICAgICAgICAgICAgaWYgc2VsZi5ldmVudC5lbmNvZGluZyBhbmQgbm90IGhhc2F0dHIoc2VsZi5zdHJlYW0sICdlbmNvZGluZycpOgorICAgICAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBzZWxmLmV2ZW50LmVuY29kaW5nCisgICAgICAgICAgICBzZWxmLndyaXRlX3N0cmVhbV9zdGFydCgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5leHBlY3RfZmlyc3RfZG9jdW1lbnRfc3RhcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEVtaXR0ZXJFcnJvcigiZXhwZWN0ZWQgU3RyZWFtU3RhcnRFdmVudCwgYnV0IGdvdCAlcyIKKyAgICAgICAgICAgICAgICAgICAgJSBzZWxmLmV2ZW50KQorCisgICAgZGVmIGV4cGVjdF9ub3RoaW5nKHNlbGYpOgorICAgICAgICByYWlzZSBFbWl0dGVyRXJyb3IoImV4cGVjdGVkIG5vdGhpbmcsIGJ1dCBnb3QgJXMiICUgc2VsZi5ldmVudCkKKworICAgICMgRG9jdW1lbnQgaGFuZGxlcnMuCisKKyAgICBkZWYgZXhwZWN0X2ZpcnN0X2RvY3VtZW50X3N0YXJ0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RfZG9jdW1lbnRfc3RhcnQoZmlyc3Q9VHJ1ZSkKKworICAgIGRlZiBleHBlY3RfZG9jdW1lbnRfc3RhcnQoc2VsZiwgZmlyc3Q9RmFsc2UpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIERvY3VtZW50U3RhcnRFdmVudCk6CisgICAgICAgICAgICBpZiAoc2VsZi5ldmVudC52ZXJzaW9uIG9yIHNlbGYuZXZlbnQudGFncykgYW5kIHNlbGYub3Blbl9lbmRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignLi4uJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGVudCgpCisgICAgICAgICAgICBpZiBzZWxmLmV2ZW50LnZlcnNpb246CisgICAgICAgICAgICAgICAgdmVyc2lvbl90ZXh0ID0gc2VsZi5wcmVwYXJlX3ZlcnNpb24oc2VsZi5ldmVudC52ZXJzaW9uKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfdmVyc2lvbl9kaXJlY3RpdmUodmVyc2lvbl90ZXh0KQorICAgICAgICAgICAgc2VsZi50YWdfcHJlZml4ZXMgPSBzZWxmLkRFRkFVTFRfVEFHX1BSRUZJWEVTLmNvcHkoKQorICAgICAgICAgICAgaWYgc2VsZi5ldmVudC50YWdzOgorICAgICAgICAgICAgICAgIGhhbmRsZXMgPSBzb3J0ZWQoc2VsZi5ldmVudC50YWdzLmtleXMoKSkKKyAgICAgICAgICAgICAgICBmb3IgaGFuZGxlIGluIGhhbmRsZXM6CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHNlbGYuZXZlbnQudGFnc1toYW5kbGVdCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFnX3ByZWZpeGVzW3ByZWZpeF0gPSBoYW5kbGUKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlX3RleHQgPSBzZWxmLnByZXBhcmVfdGFnX2hhbmRsZShoYW5kbGUpCisgICAgICAgICAgICAgICAgICAgIHByZWZpeF90ZXh0ID0gc2VsZi5wcmVwYXJlX3RhZ19wcmVmaXgocHJlZml4KQorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3RhZ19kaXJlY3RpdmUoaGFuZGxlX3RleHQsIHByZWZpeF90ZXh0KQorICAgICAgICAgICAgaW1wbGljaXQgPSAoZmlyc3QgYW5kIG5vdCBzZWxmLmV2ZW50LmV4cGxpY2l0IGFuZCBub3Qgc2VsZi5jYW5vbmljYWwKKyAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBzZWxmLmV2ZW50LnZlcnNpb24gYW5kIG5vdCBzZWxmLmV2ZW50LnRhZ3MKKyAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBzZWxmLmNoZWNrX2VtcHR5X2RvY3VtZW50KCkpCisgICAgICAgICAgICBpZiBub3QgaW1wbGljaXQ6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRlbnQoKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kaWNhdG9yKCctLS0nLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2Fub25pY2FsOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGVudCgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5leHBlY3RfZG9jdW1lbnRfcm9vdAorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgU3RyZWFtRW5kRXZlbnQpOgorICAgICAgICAgICAgaWYgc2VsZi5vcGVuX2VuZGVkOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kaWNhdG9yKCcuLi4nLCBUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgIHNlbGYud3JpdGVfc3RyZWFtX2VuZCgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5leHBlY3Rfbm90aGluZworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRW1pdHRlckVycm9yKCJleHBlY3RlZCBEb2N1bWVudFN0YXJ0RXZlbnQsIGJ1dCBnb3QgJXMiCisgICAgICAgICAgICAgICAgICAgICUgc2VsZi5ldmVudCkKKworICAgIGRlZiBleHBlY3RfZG9jdW1lbnRfZW5kKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIERvY3VtZW50RW5kRXZlbnQpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRlbnQoKQorICAgICAgICAgICAgaWYgc2VsZi5ldmVudC5leHBsaWNpdDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignLi4uJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGVudCgpCisgICAgICAgICAgICBzZWxmLmZsdXNoX3N0cmVhbSgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5leHBlY3RfZG9jdW1lbnRfc3RhcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEVtaXR0ZXJFcnJvcigiZXhwZWN0ZWQgRG9jdW1lbnRFbmRFdmVudCwgYnV0IGdvdCAlcyIKKyAgICAgICAgICAgICAgICAgICAgJSBzZWxmLmV2ZW50KQorCisgICAgZGVmIGV4cGVjdF9kb2N1bWVudF9yb290KHNlbGYpOgorICAgICAgICBzZWxmLnN0YXRlcy5hcHBlbmQoc2VsZi5leHBlY3RfZG9jdW1lbnRfZW5kKQorICAgICAgICBzZWxmLmV4cGVjdF9ub2RlKHJvb3Q9VHJ1ZSkKKworICAgICMgTm9kZSBoYW5kbGVycy4KKworICAgIGRlZiBleHBlY3Rfbm9kZShzZWxmLCByb290PUZhbHNlLCBzZXF1ZW5jZT1GYWxzZSwgbWFwcGluZz1GYWxzZSwKKyAgICAgICAgICAgIHNpbXBsZV9rZXk9RmFsc2UpOgorICAgICAgICBzZWxmLnJvb3RfY29udGV4dCA9IHJvb3QKKyAgICAgICAgc2VsZi5zZXF1ZW5jZV9jb250ZXh0ID0gc2VxdWVuY2UKKyAgICAgICAgc2VsZi5tYXBwaW5nX2NvbnRleHQgPSBtYXBwaW5nCisgICAgICAgIHNlbGYuc2ltcGxlX2tleV9jb250ZXh0ID0gc2ltcGxlX2tleQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIEFsaWFzRXZlbnQpOgorICAgICAgICAgICAgc2VsZi5leHBlY3RfYWxpYXMoKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgKFNjYWxhckV2ZW50LCBDb2xsZWN0aW9uU3RhcnRFdmVudCkpOgorICAgICAgICAgICAgc2VsZi5wcm9jZXNzX2FuY2hvcignJicpCisgICAgICAgICAgICBzZWxmLnByb2Nlc3NfdGFnKCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgU2NhbGFyRXZlbnQpOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0X3NjYWxhcigpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgU2VxdWVuY2VTdGFydEV2ZW50KToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZsb3dfbGV2ZWwgb3Igc2VsZi5jYW5vbmljYWwgb3Igc2VsZi5ldmVudC5mbG93X3N0eWxlICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3Igc2VsZi5jaGVja19lbXB0eV9zZXF1ZW5jZSgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF9mbG93X3NlcXVlbmNlKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF9ibG9ja19zZXF1ZW5jZSgpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgTWFwcGluZ1N0YXJ0RXZlbnQpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmxvd19sZXZlbCBvciBzZWxmLmNhbm9uaWNhbCBvciBzZWxmLmV2ZW50LmZsb3dfc3R5bGUgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBvciBzZWxmLmNoZWNrX2VtcHR5X21hcHBpbmcoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RfZmxvd19tYXBwaW5nKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF9ibG9ja19tYXBwaW5nKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEVtaXR0ZXJFcnJvcigiZXhwZWN0ZWQgTm9kZUV2ZW50LCBidXQgZ290ICVzIiAlIHNlbGYuZXZlbnQpCisKKyAgICBkZWYgZXhwZWN0X2FsaWFzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmV2ZW50LmFuY2hvciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRW1pdHRlckVycm9yKCJhbmNob3IgaXMgbm90IHNwZWNpZmllZCBmb3IgYWxpYXMiKQorICAgICAgICBzZWxmLnByb2Nlc3NfYW5jaG9yKCcqJykKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVzLnBvcCgpCisKKyAgICBkZWYgZXhwZWN0X3NjYWxhcihzZWxmKToKKyAgICAgICAgc2VsZi5pbmNyZWFzZV9pbmRlbnQoZmxvdz1UcnVlKQorICAgICAgICBzZWxmLnByb2Nlc3Nfc2NhbGFyKCkKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBzZWxmLmluZGVudHMucG9wKCkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVzLnBvcCgpCisKKyAgICAjIEZsb3cgc2VxdWVuY2UgaGFuZGxlcnMuCisKKyAgICBkZWYgZXhwZWN0X2Zsb3dfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfaW5kaWNhdG9yKCdbJywgVHJ1ZSwgd2hpdGVzcGFjZT1UcnVlKQorICAgICAgICBzZWxmLmZsb3dfbGV2ZWwgKz0gMQorICAgICAgICBzZWxmLmluY3JlYXNlX2luZGVudChmbG93PVRydWUpCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLmV4cGVjdF9maXJzdF9mbG93X3NlcXVlbmNlX2l0ZW0KKworICAgIGRlZiBleHBlY3RfZmlyc3RfZmxvd19zZXF1ZW5jZV9pdGVtKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIFNlcXVlbmNlRW5kRXZlbnQpOgorICAgICAgICAgICAgc2VsZi5pbmRlbnQgPSBzZWxmLmluZGVudHMucG9wKCkKKyAgICAgICAgICAgIHNlbGYuZmxvd19sZXZlbCAtPSAxCisgICAgICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignXScsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVzLnBvcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmNhbm9uaWNhbCBvciBzZWxmLmNvbHVtbiA+IHNlbGYuYmVzdF93aWR0aDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGVudCgpCisgICAgICAgICAgICBzZWxmLnN0YXRlcy5hcHBlbmQoc2VsZi5leHBlY3RfZmxvd19zZXF1ZW5jZV9pdGVtKQorICAgICAgICAgICAgc2VsZi5leHBlY3Rfbm9kZShzZXF1ZW5jZT1UcnVlKQorCisgICAgZGVmIGV4cGVjdF9mbG93X3NlcXVlbmNlX2l0ZW0oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgU2VxdWVuY2VFbmRFdmVudCk6CisgICAgICAgICAgICBzZWxmLmluZGVudCA9IHNlbGYuaW5kZW50cy5wb3AoKQorICAgICAgICAgICAgc2VsZi5mbG93X2xldmVsIC09IDEKKyAgICAgICAgICAgIGlmIHNlbGYuY2Fub25pY2FsOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kaWNhdG9yKCcsJywgRmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRlbnQoKQorICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJ10nLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnN0YXRlcy5wb3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJywnLCBGYWxzZSkKKyAgICAgICAgICAgIGlmIHNlbGYuY2Fub25pY2FsIG9yIHNlbGYuY29sdW1uID4gc2VsZi5iZXN0X3dpZHRoOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGVzLmFwcGVuZChzZWxmLmV4cGVjdF9mbG93X3NlcXVlbmNlX2l0ZW0pCisgICAgICAgICAgICBzZWxmLmV4cGVjdF9ub2RlKHNlcXVlbmNlPVRydWUpCisKKyAgICAjIEZsb3cgbWFwcGluZyBoYW5kbGVycy4KKworICAgIGRlZiBleHBlY3RfZmxvd19tYXBwaW5nKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcigneycsIFRydWUsIHdoaXRlc3BhY2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5mbG93X2xldmVsICs9IDEKKyAgICAgICAgc2VsZi5pbmNyZWFzZV9pbmRlbnQoZmxvdz1UcnVlKQorICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5leHBlY3RfZmlyc3RfZmxvd19tYXBwaW5nX2tleQorCisgICAgZGVmIGV4cGVjdF9maXJzdF9mbG93X21hcHBpbmdfa2V5KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIE1hcHBpbmdFbmRFdmVudCk6CisgICAgICAgICAgICBzZWxmLmluZGVudCA9IHNlbGYuaW5kZW50cy5wb3AoKQorICAgICAgICAgICAgc2VsZi5mbG93X2xldmVsIC09IDEKKyAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kaWNhdG9yKCd9JywgRmFsc2UpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5zdGF0ZXMucG9wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuY2Fub25pY2FsIG9yIHNlbGYuY29sdW1uID4gc2VsZi5iZXN0X3dpZHRoOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNhbm9uaWNhbCBhbmQgc2VsZi5jaGVja19zaW1wbGVfa2V5KCk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYuZXhwZWN0X2Zsb3dfbWFwcGluZ19zaW1wbGVfdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3Rfbm9kZShtYXBwaW5nPVRydWUsIHNpbXBsZV9rZXk9VHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJz8nLCBUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVzLmFwcGVuZChzZWxmLmV4cGVjdF9mbG93X21hcHBpbmdfdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3Rfbm9kZShtYXBwaW5nPVRydWUpCisKKyAgICBkZWYgZXhwZWN0X2Zsb3dfbWFwcGluZ19rZXkoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgTWFwcGluZ0VuZEV2ZW50KToKKyAgICAgICAgICAgIHNlbGYuaW5kZW50ID0gc2VsZi5pbmRlbnRzLnBvcCgpCisgICAgICAgICAgICBzZWxmLmZsb3dfbGV2ZWwgLT0gMQorICAgICAgICAgICAgaWYgc2VsZi5jYW5vbmljYWw6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJywnLCBGYWxzZSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGVudCgpCisgICAgICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignfScsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVzLnBvcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignLCcsIEZhbHNlKQorICAgICAgICAgICAgaWYgc2VsZi5jYW5vbmljYWwgb3Igc2VsZi5jb2x1bW4gPiBzZWxmLmJlc3Rfd2lkdGg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRlbnQoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2Fub25pY2FsIGFuZCBzZWxmLmNoZWNrX3NpbXBsZV9rZXkoKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlcy5hcHBlbmQoc2VsZi5leHBlY3RfZmxvd19tYXBwaW5nX3NpbXBsZV92YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF9ub2RlKG1hcHBpbmc9VHJ1ZSwgc2ltcGxlX2tleT1UcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignPycsIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYuZXhwZWN0X2Zsb3dfbWFwcGluZ192YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF9ub2RlKG1hcHBpbmc9VHJ1ZSkKKworICAgIGRlZiBleHBlY3RfZmxvd19tYXBwaW5nX3NpbXBsZV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJzonLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYuZXhwZWN0X2Zsb3dfbWFwcGluZ19rZXkpCisgICAgICAgIHNlbGYuZXhwZWN0X25vZGUobWFwcGluZz1UcnVlKQorCisgICAgZGVmIGV4cGVjdF9mbG93X21hcHBpbmdfdmFsdWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2Fub25pY2FsIG9yIHNlbGYuY29sdW1uID4gc2VsZi5iZXN0X3dpZHRoOgorICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRlbnQoKQorICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignOicsIFRydWUpCisgICAgICAgIHNlbGYuc3RhdGVzLmFwcGVuZChzZWxmLmV4cGVjdF9mbG93X21hcHBpbmdfa2V5KQorICAgICAgICBzZWxmLmV4cGVjdF9ub2RlKG1hcHBpbmc9VHJ1ZSkKKworICAgICMgQmxvY2sgc2VxdWVuY2UgaGFuZGxlcnMuCisKKyAgICBkZWYgZXhwZWN0X2Jsb2NrX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBpbmRlbnRsZXNzID0gKHNlbGYubWFwcGluZ19jb250ZXh0IGFuZCBub3Qgc2VsZi5pbmRlbnRpb24pCisgICAgICAgIHNlbGYuaW5jcmVhc2VfaW5kZW50KGZsb3c9RmFsc2UsIGluZGVudGxlc3M9aW5kZW50bGVzcykKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZXhwZWN0X2ZpcnN0X2Jsb2NrX3NlcXVlbmNlX2l0ZW0KKworICAgIGRlZiBleHBlY3RfZmlyc3RfYmxvY2tfc2VxdWVuY2VfaXRlbShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwZWN0X2Jsb2NrX3NlcXVlbmNlX2l0ZW0oZmlyc3Q9VHJ1ZSkKKworICAgIGRlZiBleHBlY3RfYmxvY2tfc2VxdWVuY2VfaXRlbShzZWxmLCBmaXJzdD1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBmaXJzdCBhbmQgaXNpbnN0YW5jZShzZWxmLmV2ZW50LCBTZXF1ZW5jZUVuZEV2ZW50KToKKyAgICAgICAgICAgIHNlbGYuaW5kZW50ID0gc2VsZi5pbmRlbnRzLnBvcCgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5zdGF0ZXMucG9wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kaWNhdG9yKCctJywgVHJ1ZSwgaW5kZW50aW9uPVRydWUpCisgICAgICAgICAgICBzZWxmLnN0YXRlcy5hcHBlbmQoc2VsZi5leHBlY3RfYmxvY2tfc2VxdWVuY2VfaXRlbSkKKyAgICAgICAgICAgIHNlbGYuZXhwZWN0X25vZGUoc2VxdWVuY2U9VHJ1ZSkKKworICAgICMgQmxvY2sgbWFwcGluZyBoYW5kbGVycy4KKworICAgIGRlZiBleHBlY3RfYmxvY2tfbWFwcGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmNyZWFzZV9pbmRlbnQoZmxvdz1GYWxzZSkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuZXhwZWN0X2ZpcnN0X2Jsb2NrX21hcHBpbmdfa2V5CisKKyAgICBkZWYgZXhwZWN0X2ZpcnN0X2Jsb2NrX21hcHBpbmdfa2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RfYmxvY2tfbWFwcGluZ19rZXkoZmlyc3Q9VHJ1ZSkKKworICAgIGRlZiBleHBlY3RfYmxvY2tfbWFwcGluZ19rZXkoc2VsZiwgZmlyc3Q9RmFsc2UpOgorICAgICAgICBpZiBub3QgZmlyc3QgYW5kIGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgTWFwcGluZ0VuZEV2ZW50KToKKyAgICAgICAgICAgIHNlbGYuaW5kZW50ID0gc2VsZi5pbmRlbnRzLnBvcCgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5zdGF0ZXMucG9wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfc2ltcGxlX2tleSgpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVzLmFwcGVuZChzZWxmLmV4cGVjdF9ibG9ja19tYXBwaW5nX3NpbXBsZV92YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF9ub2RlKG1hcHBpbmc9VHJ1ZSwgc2ltcGxlX2tleT1UcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignPycsIFRydWUsIGluZGVudGlvbj1UcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVzLmFwcGVuZChzZWxmLmV4cGVjdF9ibG9ja19tYXBwaW5nX3ZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0X25vZGUobWFwcGluZz1UcnVlKQorCisgICAgZGVmIGV4cGVjdF9ibG9ja19tYXBwaW5nX3NpbXBsZV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJzonLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYuZXhwZWN0X2Jsb2NrX21hcHBpbmdfa2V5KQorICAgICAgICBzZWxmLmV4cGVjdF9ub2RlKG1hcHBpbmc9VHJ1ZSkKKworICAgIGRlZiBleHBlY3RfYmxvY2tfbWFwcGluZ192YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9pbmRlbnQoKQorICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignOicsIFRydWUsIGluZGVudGlvbj1UcnVlKQorICAgICAgICBzZWxmLnN0YXRlcy5hcHBlbmQoc2VsZi5leHBlY3RfYmxvY2tfbWFwcGluZ19rZXkpCisgICAgICAgIHNlbGYuZXhwZWN0X25vZGUobWFwcGluZz1UcnVlKQorCisgICAgIyBDaGVja2Vycy4KKworICAgIGRlZiBjaGVja19lbXB0eV9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgcmV0dXJuIChpc2luc3RhbmNlKHNlbGYuZXZlbnQsIFNlcXVlbmNlU3RhcnRFdmVudCkgYW5kIHNlbGYuZXZlbnRzCisgICAgICAgICAgICAgICAgYW5kIGlzaW5zdGFuY2Uoc2VsZi5ldmVudHNbMF0sIFNlcXVlbmNlRW5kRXZlbnQpKQorCisgICAgZGVmIGNoZWNrX2VtcHR5X21hcHBpbmcoc2VsZik6CisgICAgICAgIHJldHVybiAoaXNpbnN0YW5jZShzZWxmLmV2ZW50LCBNYXBwaW5nU3RhcnRFdmVudCkgYW5kIHNlbGYuZXZlbnRzCisgICAgICAgICAgICAgICAgYW5kIGlzaW5zdGFuY2Uoc2VsZi5ldmVudHNbMF0sIE1hcHBpbmdFbmRFdmVudCkpCisKKyAgICBkZWYgY2hlY2tfZW1wdHlfZG9jdW1lbnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIERvY3VtZW50U3RhcnRFdmVudCkgb3Igbm90IHNlbGYuZXZlbnRzOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV2ZW50ID0gc2VsZi5ldmVudHNbMF0KKyAgICAgICAgcmV0dXJuIChpc2luc3RhbmNlKGV2ZW50LCBTY2FsYXJFdmVudCkgYW5kIGV2ZW50LmFuY2hvciBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGV2ZW50LnRhZyBpcyBOb25lIGFuZCBldmVudC5pbXBsaWNpdCBhbmQgZXZlbnQudmFsdWUgPT0gJycpCisKKyAgICBkZWYgY2hlY2tfc2ltcGxlX2tleShzZWxmKToKKyAgICAgICAgbGVuZ3RoID0gMAorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIE5vZGVFdmVudCkgYW5kIHNlbGYuZXZlbnQuYW5jaG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5wcmVwYXJlZF9hbmNob3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnByZXBhcmVkX2FuY2hvciA9IHNlbGYucHJlcGFyZV9hbmNob3Ioc2VsZi5ldmVudC5hbmNob3IpCisgICAgICAgICAgICBsZW5ndGggKz0gbGVuKHNlbGYucHJlcGFyZWRfYW5jaG9yKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIChTY2FsYXJFdmVudCwgQ29sbGVjdGlvblN0YXJ0RXZlbnQpKSAgXAorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmV2ZW50LnRhZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYucHJlcGFyZWRfdGFnIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5wcmVwYXJlZF90YWcgPSBzZWxmLnByZXBhcmVfdGFnKHNlbGYuZXZlbnQudGFnKQorICAgICAgICAgICAgbGVuZ3RoICs9IGxlbihzZWxmLnByZXBhcmVkX3RhZykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmV2ZW50LCBTY2FsYXJFdmVudCk6CisgICAgICAgICAgICBpZiBzZWxmLmFuYWx5c2lzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hbmFseXNpcyA9IHNlbGYuYW5hbHl6ZV9zY2FsYXIoc2VsZi5ldmVudC52YWx1ZSkKKyAgICAgICAgICAgIGxlbmd0aCArPSBsZW4oc2VsZi5hbmFseXNpcy5zY2FsYXIpCisgICAgICAgIHJldHVybiAobGVuZ3RoIDwgMTI4IGFuZCAoaXNpbnN0YW5jZShzZWxmLmV2ZW50LCBBbGlhc0V2ZW50KQorICAgICAgICAgICAgb3IgKGlzaW5zdGFuY2Uoc2VsZi5ldmVudCwgU2NhbGFyRXZlbnQpCisgICAgICAgICAgICAgICAgICAgIGFuZCBub3Qgc2VsZi5hbmFseXNpcy5lbXB0eSBhbmQgbm90IHNlbGYuYW5hbHlzaXMubXVsdGlsaW5lKQorICAgICAgICAgICAgb3Igc2VsZi5jaGVja19lbXB0eV9zZXF1ZW5jZSgpIG9yIHNlbGYuY2hlY2tfZW1wdHlfbWFwcGluZygpKSkKKworICAgICMgQW5jaG9yLCBUYWcsIGFuZCBTY2FsYXIgcHJvY2Vzc29ycy4KKworICAgIGRlZiBwcm9jZXNzX2FuY2hvcihzZWxmLCBpbmRpY2F0b3IpOgorICAgICAgICBpZiBzZWxmLmV2ZW50LmFuY2hvciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5wcmVwYXJlZF9hbmNob3IgPSBOb25lCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5wcmVwYXJlZF9hbmNob3IgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYucHJlcGFyZWRfYW5jaG9yID0gc2VsZi5wcmVwYXJlX2FuY2hvcihzZWxmLmV2ZW50LmFuY2hvcikKKyAgICAgICAgaWYgc2VsZi5wcmVwYXJlZF9hbmNob3I6CisgICAgICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcihpbmRpY2F0b3Irc2VsZi5wcmVwYXJlZF9hbmNob3IsIFRydWUpCisgICAgICAgIHNlbGYucHJlcGFyZWRfYW5jaG9yID0gTm9uZQorCisgICAgZGVmIHByb2Nlc3NfdGFnKHNlbGYpOgorICAgICAgICB0YWcgPSBzZWxmLmV2ZW50LnRhZworICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXZlbnQsIFNjYWxhckV2ZW50KToKKyAgICAgICAgICAgIGlmIHNlbGYuc3R5bGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0eWxlID0gc2VsZi5jaG9vc2Vfc2NhbGFyX3N0eWxlKCkKKyAgICAgICAgICAgIGlmICgobm90IHNlbGYuY2Fub25pY2FsIG9yIHRhZyBpcyBOb25lKSBhbmQKKyAgICAgICAgICAgICAgICAoKHNlbGYuc3R5bGUgPT0gJycgYW5kIHNlbGYuZXZlbnQuaW1wbGljaXRbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBvciAoc2VsZi5zdHlsZSAhPSAnJyBhbmQgc2VsZi5ldmVudC5pbXBsaWNpdFsxXSkpKToKKyAgICAgICAgICAgICAgICBzZWxmLnByZXBhcmVkX3RhZyA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIHNlbGYuZXZlbnQuaW1wbGljaXRbMF0gYW5kIHRhZyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRhZyA9ICchJworICAgICAgICAgICAgICAgIHNlbGYucHJlcGFyZWRfdGFnID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgKG5vdCBzZWxmLmNhbm9uaWNhbCBvciB0YWcgaXMgTm9uZSkgYW5kIHNlbGYuZXZlbnQuaW1wbGljaXQ6CisgICAgICAgICAgICAgICAgc2VsZi5wcmVwYXJlZF90YWcgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHRhZyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRW1pdHRlckVycm9yKCJ0YWcgaXMgbm90IHNwZWNpZmllZCIpCisgICAgICAgIGlmIHNlbGYucHJlcGFyZWRfdGFnIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnByZXBhcmVkX3RhZyA9IHNlbGYucHJlcGFyZV90YWcodGFnKQorICAgICAgICBpZiBzZWxmLnByZXBhcmVkX3RhZzoKKyAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kaWNhdG9yKHNlbGYucHJlcGFyZWRfdGFnLCBUcnVlKQorICAgICAgICBzZWxmLnByZXBhcmVkX3RhZyA9IE5vbmUKKworICAgIGRlZiBjaG9vc2Vfc2NhbGFyX3N0eWxlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmFuYWx5c2lzIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFuYWx5c2lzID0gc2VsZi5hbmFseXplX3NjYWxhcihzZWxmLmV2ZW50LnZhbHVlKQorICAgICAgICBpZiBzZWxmLmV2ZW50LnN0eWxlID09ICciJyBvciBzZWxmLmNhbm9uaWNhbDoKKyAgICAgICAgICAgIHJldHVybiAnIicKKyAgICAgICAgaWYgbm90IHNlbGYuZXZlbnQuc3R5bGUgYW5kIHNlbGYuZXZlbnQuaW1wbGljaXRbMF06CisgICAgICAgICAgICBpZiAobm90IChzZWxmLnNpbXBsZV9rZXlfY29udGV4dCBhbmQKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYuYW5hbHlzaXMuZW1wdHkgb3Igc2VsZi5hbmFseXNpcy5tdWx0aWxpbmUpKQorICAgICAgICAgICAgICAgIGFuZCAoc2VsZi5mbG93X2xldmVsIGFuZCBzZWxmLmFuYWx5c2lzLmFsbG93X2Zsb3dfcGxhaW4KKyAgICAgICAgICAgICAgICAgICAgb3IgKG5vdCBzZWxmLmZsb3dfbGV2ZWwgYW5kIHNlbGYuYW5hbHlzaXMuYWxsb3dfYmxvY2tfcGxhaW4pKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGlmIHNlbGYuZXZlbnQuc3R5bGUgYW5kIHNlbGYuZXZlbnQuc3R5bGUgaW4gJ3w+JzoKKyAgICAgICAgICAgIGlmIChub3Qgc2VsZi5mbG93X2xldmVsIGFuZCBub3Qgc2VsZi5zaW1wbGVfa2V5X2NvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYuYW5hbHlzaXMuYWxsb3dfYmxvY2spOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmV2ZW50LnN0eWxlCisgICAgICAgIGlmIG5vdCBzZWxmLmV2ZW50LnN0eWxlIG9yIHNlbGYuZXZlbnQuc3R5bGUgPT0gJ1wnJzoKKyAgICAgICAgICAgIGlmIChzZWxmLmFuYWx5c2lzLmFsbG93X3NpbmdsZV9xdW90ZWQgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCAoc2VsZi5zaW1wbGVfa2V5X2NvbnRleHQgYW5kIHNlbGYuYW5hbHlzaXMubXVsdGlsaW5lKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdcJycKKyAgICAgICAgcmV0dXJuICciJworCisgICAgZGVmIHByb2Nlc3Nfc2NhbGFyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmFuYWx5c2lzIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFuYWx5c2lzID0gc2VsZi5hbmFseXplX3NjYWxhcihzZWxmLmV2ZW50LnZhbHVlKQorICAgICAgICBpZiBzZWxmLnN0eWxlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0eWxlID0gc2VsZi5jaG9vc2Vfc2NhbGFyX3N0eWxlKCkKKyAgICAgICAgc3BsaXQgPSAobm90IHNlbGYuc2ltcGxlX2tleV9jb250ZXh0KQorICAgICAgICAjaWYgc2VsZi5hbmFseXNpcy5tdWx0aWxpbmUgYW5kIHNwbGl0ICAgIFwKKyAgICAgICAgIyAgICAgICAgYW5kIChub3Qgc2VsZi5zdHlsZSBvciBzZWxmLnN0eWxlIGluICdcJ1wiJyk6CisgICAgICAgICMgICAgc2VsZi53cml0ZV9pbmRlbnQoKQorICAgICAgICBpZiBzZWxmLnN0eWxlID09ICciJzoKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZG91YmxlX3F1b3RlZChzZWxmLmFuYWx5c2lzLnNjYWxhciwgc3BsaXQpCisgICAgICAgIGVsaWYgc2VsZi5zdHlsZSA9PSAnXCcnOgorICAgICAgICAgICAgc2VsZi53cml0ZV9zaW5nbGVfcXVvdGVkKHNlbGYuYW5hbHlzaXMuc2NhbGFyLCBzcGxpdCkKKyAgICAgICAgZWxpZiBzZWxmLnN0eWxlID09ICc+JzoKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZm9sZGVkKHNlbGYuYW5hbHlzaXMuc2NhbGFyKQorICAgICAgICBlbGlmIHNlbGYuc3R5bGUgPT0gJ3wnOgorICAgICAgICAgICAgc2VsZi53cml0ZV9saXRlcmFsKHNlbGYuYW5hbHlzaXMuc2NhbGFyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53cml0ZV9wbGFpbihzZWxmLmFuYWx5c2lzLnNjYWxhciwgc3BsaXQpCisgICAgICAgIHNlbGYuYW5hbHlzaXMgPSBOb25lCisgICAgICAgIHNlbGYuc3R5bGUgPSBOb25lCisKKyAgICAjIEFuYWx5emVycy4KKworICAgIGRlZiBwcmVwYXJlX3ZlcnNpb24oc2VsZiwgdmVyc2lvbik6CisgICAgICAgIG1ham9yLCBtaW5vciA9IHZlcnNpb24KKyAgICAgICAgaWYgbWFqb3IgIT0gMToKKyAgICAgICAgICAgIHJhaXNlIEVtaXR0ZXJFcnJvcigidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uOiAlZC4lZCIgJSAobWFqb3IsIG1pbm9yKSkKKyAgICAgICAgcmV0dXJuICclZC4lZCcgJSAobWFqb3IsIG1pbm9yKQorCisgICAgZGVmIHByZXBhcmVfdGFnX2hhbmRsZShzZWxmLCBoYW5kbGUpOgorICAgICAgICBpZiBub3QgaGFuZGxlOgorICAgICAgICAgICAgcmFpc2UgRW1pdHRlckVycm9yKCJ0YWcgaGFuZGxlIG11c3Qgbm90IGJlIGVtcHR5IikKKyAgICAgICAgaWYgaGFuZGxlWzBdICE9ICchJyBvciBoYW5kbGVbLTFdICE9ICchJzoKKyAgICAgICAgICAgIHJhaXNlIEVtaXR0ZXJFcnJvcigidGFnIGhhbmRsZSBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCAnISc6ICVyIiAlIGhhbmRsZSkKKyAgICAgICAgZm9yIGNoIGluIGhhbmRsZVsxOi0xXToKKyAgICAgICAgICAgIGlmIG5vdCAoJzAnIDw9IGNoIDw9ICc5JyBvciAnQScgPD0gY2ggPD0gJ1onIG9yICdhJyA8PSBjaCA8PSAneicgICAgXAorICAgICAgICAgICAgICAgICAgICBvciBjaCBpbiAnLV8nKToKKyAgICAgICAgICAgICAgICByYWlzZSBFbWl0dGVyRXJyb3IoImludmFsaWQgY2hhcmFjdGVyICVyIGluIHRoZSB0YWcgaGFuZGxlOiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGNoLCBoYW5kbGUpKQorICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICBkZWYgcHJlcGFyZV90YWdfcHJlZml4KHNlbGYsIHByZWZpeCk6CisgICAgICAgIGlmIG5vdCBwcmVmaXg6CisgICAgICAgICAgICByYWlzZSBFbWl0dGVyRXJyb3IoInRhZyBwcmVmaXggbXVzdCBub3QgYmUgZW1wdHkiKQorICAgICAgICBjaHVua3MgPSBbXQorICAgICAgICBzdGFydCA9IGVuZCA9IDAKKyAgICAgICAgaWYgcHJlZml4WzBdID09ICchJzoKKyAgICAgICAgICAgIGVuZCA9IDEKKyAgICAgICAgd2hpbGUgZW5kIDwgbGVuKHByZWZpeCk6CisgICAgICAgICAgICBjaCA9IHByZWZpeFtlbmRdCisgICAgICAgICAgICBpZiAnMCcgPD0gY2ggPD0gJzknIG9yICdBJyA8PSBjaCA8PSAnWicgb3IgJ2EnIDw9IGNoIDw9ICd6JyBcCisgICAgICAgICAgICAgICAgICAgIG9yIGNoIGluICctOy8/ITpAJj0rJCxfLn4qXCcoKVtdJzoKKyAgICAgICAgICAgICAgICBlbmQgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzdGFydCA8IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChwcmVmaXhbc3RhcnQ6ZW5kXSkKKyAgICAgICAgICAgICAgICBzdGFydCA9IGVuZCA9IGVuZCsxCisgICAgICAgICAgICAgICAgZGF0YSA9IGNoLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGZvciBjaCBpbiBkYXRhOgorICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKCclJSUwMlgnICUgb3JkKGNoKSkKKyAgICAgICAgaWYgc3RhcnQgPCBlbmQ6CisgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHByZWZpeFtzdGFydDplbmRdKQorICAgICAgICByZXR1cm4gJycuam9pbihjaHVua3MpCisKKyAgICBkZWYgcHJlcGFyZV90YWcoc2VsZiwgdGFnKToKKyAgICAgICAgaWYgbm90IHRhZzoKKyAgICAgICAgICAgIHJhaXNlIEVtaXR0ZXJFcnJvcigidGFnIG11c3Qgbm90IGJlIGVtcHR5IikKKyAgICAgICAgaWYgdGFnID09ICchJzoKKyAgICAgICAgICAgIHJldHVybiB0YWcKKyAgICAgICAgaGFuZGxlID0gTm9uZQorICAgICAgICBzdWZmaXggPSB0YWcKKyAgICAgICAgcHJlZml4ZXMgPSBzb3J0ZWQoc2VsZi50YWdfcHJlZml4ZXMua2V5cygpKQorICAgICAgICBmb3IgcHJlZml4IGluIHByZWZpeGVzOgorICAgICAgICAgICAgaWYgdGFnLnN0YXJ0c3dpdGgocHJlZml4KSAgIFwKKyAgICAgICAgICAgICAgICAgICAgYW5kIChwcmVmaXggPT0gJyEnIG9yIGxlbihwcmVmaXgpIDwgbGVuKHRhZykpOgorICAgICAgICAgICAgICAgIGhhbmRsZSA9IHNlbGYudGFnX3ByZWZpeGVzW3ByZWZpeF0KKyAgICAgICAgICAgICAgICBzdWZmaXggPSB0YWdbbGVuKHByZWZpeCk6XQorICAgICAgICBjaHVua3MgPSBbXQorICAgICAgICBzdGFydCA9IGVuZCA9IDAKKyAgICAgICAgd2hpbGUgZW5kIDwgbGVuKHN1ZmZpeCk6CisgICAgICAgICAgICBjaCA9IHN1ZmZpeFtlbmRdCisgICAgICAgICAgICBpZiAnMCcgPD0gY2ggPD0gJzknIG9yICdBJyA8PSBjaCA8PSAnWicgb3IgJ2EnIDw9IGNoIDw9ICd6JyBcCisgICAgICAgICAgICAgICAgICAgIG9yIGNoIGluICctOy8/OkAmPSskLF8ufipcJygpW10nICAgXAorICAgICAgICAgICAgICAgICAgICBvciAoY2ggPT0gJyEnIGFuZCBoYW5kbGUgIT0gJyEnKToKKyAgICAgICAgICAgICAgICBlbmQgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzdGFydCA8IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChzdWZmaXhbc3RhcnQ6ZW5kXSkKKyAgICAgICAgICAgICAgICBzdGFydCA9IGVuZCA9IGVuZCsxCisgICAgICAgICAgICAgICAgZGF0YSA9IGNoLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGZvciBjaCBpbiBkYXRhOgorICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKCclJSUwMlgnICUgY2gpCisgICAgICAgIGlmIHN0YXJ0IDwgZW5kOgorICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChzdWZmaXhbc3RhcnQ6ZW5kXSkKKyAgICAgICAgc3VmZml4X3RleHQgPSAnJy5qb2luKGNodW5rcykKKyAgICAgICAgaWYgaGFuZGxlOgorICAgICAgICAgICAgcmV0dXJuICclcyVzJyAlIChoYW5kbGUsIHN1ZmZpeF90ZXh0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICchPCVzPicgJSBzdWZmaXhfdGV4dAorCisgICAgZGVmIHByZXBhcmVfYW5jaG9yKHNlbGYsIGFuY2hvcik6CisgICAgICAgIGlmIG5vdCBhbmNob3I6CisgICAgICAgICAgICByYWlzZSBFbWl0dGVyRXJyb3IoImFuY2hvciBtdXN0IG5vdCBiZSBlbXB0eSIpCisgICAgICAgIGZvciBjaCBpbiBhbmNob3I6CisgICAgICAgICAgICBpZiBub3QgKCcwJyA8PSBjaCA8PSAnOScgb3IgJ0EnIDw9IGNoIDw9ICdaJyBvciAnYScgPD0gY2ggPD0gJ3onICAgIFwKKyAgICAgICAgICAgICAgICAgICAgb3IgY2ggaW4gJy1fJyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRW1pdHRlckVycm9yKCJpbnZhbGlkIGNoYXJhY3RlciAlciBpbiB0aGUgYW5jaG9yOiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGNoLCBhbmNob3IpKQorICAgICAgICByZXR1cm4gYW5jaG9yCisKKyAgICBkZWYgYW5hbHl6ZV9zY2FsYXIoc2VsZiwgc2NhbGFyKToKKworICAgICAgICAjIEVtcHR5IHNjYWxhciBpcyBhIHNwZWNpYWwgY2FzZS4KKyAgICAgICAgaWYgbm90IHNjYWxhcjoKKyAgICAgICAgICAgIHJldHVybiBTY2FsYXJBbmFseXNpcyhzY2FsYXI9c2NhbGFyLCBlbXB0eT1UcnVlLCBtdWx0aWxpbmU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGFsbG93X2Zsb3dfcGxhaW49RmFsc2UsIGFsbG93X2Jsb2NrX3BsYWluPVRydWUsCisgICAgICAgICAgICAgICAgICAgIGFsbG93X3NpbmdsZV9xdW90ZWQ9VHJ1ZSwgYWxsb3dfZG91YmxlX3F1b3RlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICBhbGxvd19ibG9jaz1GYWxzZSkKKworICAgICAgICAjIEluZGljYXRvcnMgYW5kIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICAgICAgYmxvY2tfaW5kaWNhdG9ycyA9IEZhbHNlCisgICAgICAgIGZsb3dfaW5kaWNhdG9ycyA9IEZhbHNlCisgICAgICAgIGxpbmVfYnJlYWtzID0gRmFsc2UKKyAgICAgICAgc3BlY2lhbF9jaGFyYWN0ZXJzID0gRmFsc2UKKworICAgICAgICAjIEltcG9ydGFudCB3aGl0ZXNwYWNlIGNvbWJpbmF0aW9ucy4KKyAgICAgICAgbGVhZGluZ19zcGFjZSA9IEZhbHNlCisgICAgICAgIGxlYWRpbmdfYnJlYWsgPSBGYWxzZQorICAgICAgICB0cmFpbGluZ19zcGFjZSA9IEZhbHNlCisgICAgICAgIHRyYWlsaW5nX2JyZWFrID0gRmFsc2UKKyAgICAgICAgYnJlYWtfc3BhY2UgPSBGYWxzZQorICAgICAgICBzcGFjZV9icmVhayA9IEZhbHNlCisKKyAgICAgICAgIyBDaGVjayBkb2N1bWVudCBpbmRpY2F0b3JzLgorICAgICAgICBpZiBzY2FsYXIuc3RhcnRzd2l0aCgnLS0tJykgb3Igc2NhbGFyLnN0YXJ0c3dpdGgoJy4uLicpOgorICAgICAgICAgICAgYmxvY2tfaW5kaWNhdG9ycyA9IFRydWUKKyAgICAgICAgICAgIGZsb3dfaW5kaWNhdG9ycyA9IFRydWUKKworICAgICAgICAjIEZpcnN0IGNoYXJhY3RlciBvciBwcmVjZWRlZCBieSBhIHdoaXRlc3BhY2UuCisgICAgICAgIHByZWNlZGVkX2J5X3doaXRlc3BhY2UgPSBUcnVlCisKKyAgICAgICAgIyBMYXN0IGNoYXJhY3RlciBvciBmb2xsb3dlZCBieSBhIHdoaXRlc3BhY2UuCisgICAgICAgIGZvbGxvd2VkX2J5X3doaXRlc3BhY2UgPSAobGVuKHNjYWxhcikgPT0gMSBvcgorICAgICAgICAgICAgICAgIHNjYWxhclsxXSBpbiAnXDAgXHRcclxuXHg4NVx1MjAyOFx1MjAyOScpCisKKyAgICAgICAgIyBUaGUgcHJldmlvdXMgY2hhcmFjdGVyIGlzIGEgc3BhY2UuCisgICAgICAgIHByZXZpb3VzX3NwYWNlID0gRmFsc2UKKworICAgICAgICAjIFRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgaXMgYSBicmVhay4KKyAgICAgICAgcHJldmlvdXNfYnJlYWsgPSBGYWxzZQorCisgICAgICAgIGluZGV4ID0gMAorICAgICAgICB3aGlsZSBpbmRleCA8IGxlbihzY2FsYXIpOgorICAgICAgICAgICAgY2ggPSBzY2FsYXJbaW5kZXhdCisKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIGluZGljYXRvcnMuCisgICAgICAgICAgICBpZiBpbmRleCA9PSAwOgorICAgICAgICAgICAgICAgICMgTGVhZGluZyBpbmRpY2F0b3JzIGFyZSBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgaWYgY2ggaW4gJyMsW117fSYqIXw+XCdcIiVAYCc6CisgICAgICAgICAgICAgICAgICAgIGZsb3dfaW5kaWNhdG9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tfaW5kaWNhdG9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBjaCBpbiAnPzonOgorICAgICAgICAgICAgICAgICAgICBmbG93X2luZGljYXRvcnMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGZvbGxvd2VkX2J5X3doaXRlc3BhY2U6CisgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19pbmRpY2F0b3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIGNoID09ICctJyBhbmQgZm9sbG93ZWRfYnlfd2hpdGVzcGFjZToKKyAgICAgICAgICAgICAgICAgICAgZmxvd19pbmRpY2F0b3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBibG9ja19pbmRpY2F0b3JzID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFNvbWUgaW5kaWNhdG9ycyBjYW5ub3QgYXBwZWFyIHdpdGhpbiBhIHNjYWxhciBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIGlmIGNoIGluICcsP1tde30nOgorICAgICAgICAgICAgICAgICAgICBmbG93X2luZGljYXRvcnMgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgY2ggPT0gJzonOgorICAgICAgICAgICAgICAgICAgICBmbG93X2luZGljYXRvcnMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGZvbGxvd2VkX2J5X3doaXRlc3BhY2U6CisgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19pbmRpY2F0b3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIGNoID09ICcjJyBhbmQgcHJlY2VkZWRfYnlfd2hpdGVzcGFjZToKKyAgICAgICAgICAgICAgICAgICAgZmxvd19pbmRpY2F0b3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBibG9ja19pbmRpY2F0b3JzID0gVHJ1ZQorCisgICAgICAgICAgICAjIENoZWNrIGZvciBsaW5lIGJyZWFrcywgc3BlY2lhbCwgYW5kIHVuaWNvZGUgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIGlmIGNoIGluICdcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgICAgIGxpbmVfYnJlYWtzID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IChjaCA9PSAnXG4nIG9yICdceDIwJyA8PSBjaCA8PSAnXHg3RScpOgorICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnXHg4NScgb3IgJ1x4QTAnIDw9IGNoIDw9ICdcdUQ3RkYnCisgICAgICAgICAgICAgICAgICAgICAgICBvciAnXHVFMDAwJyA8PSBjaCA8PSAnXHVGRkZEJworICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ1xVMDAwMTAwMDAnIDw9IGNoIDwgJ1xVMDAxMGZmZmYnKSBhbmQgY2ggIT0gJ1x1RkVGRic6CisgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfY2hhcmFjdGVycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuYWxsb3dfdW5pY29kZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfY2hhcmFjdGVycyA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX2NoYXJhY3RlcnMgPSBUcnVlCisKKyAgICAgICAgICAgICMgRGV0ZWN0IGltcG9ydGFudCB3aGl0ZXNwYWNlIGNvbWJpbmF0aW9ucy4KKyAgICAgICAgICAgIGlmIGNoID09ICcgJzoKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBsZWFkaW5nX3NwYWNlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIGluZGV4ID09IGxlbihzY2FsYXIpLTE6CisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nX3NwYWNlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIHByZXZpb3VzX2JyZWFrOgorICAgICAgICAgICAgICAgICAgICBicmVha19zcGFjZSA9IFRydWUKKyAgICAgICAgICAgICAgICBwcmV2aW91c19zcGFjZSA9IFRydWUKKyAgICAgICAgICAgICAgICBwcmV2aW91c19icmVhayA9IEZhbHNlCisgICAgICAgICAgICBlbGlmIGNoIGluICdcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgICAgIGlmIGluZGV4ID09IDA6CisgICAgICAgICAgICAgICAgICAgIGxlYWRpbmdfYnJlYWsgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgaW5kZXggPT0gbGVuKHNjYWxhciktMToKKyAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdfYnJlYWsgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgcHJldmlvdXNfc3BhY2U6CisgICAgICAgICAgICAgICAgICAgIHNwYWNlX2JyZWFrID0gVHJ1ZQorICAgICAgICAgICAgICAgIHByZXZpb3VzX3NwYWNlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBwcmV2aW91c19icmVhayA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJldmlvdXNfc3BhY2UgPSBGYWxzZQorICAgICAgICAgICAgICAgIHByZXZpb3VzX2JyZWFrID0gRmFsc2UKKworICAgICAgICAgICAgIyBQcmVwYXJlIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBpbmRleCArPSAxCisgICAgICAgICAgICBwcmVjZWRlZF9ieV93aGl0ZXNwYWNlID0gKGNoIGluICdcMCBcdFxyXG5ceDg1XHUyMDI4XHUyMDI5JykKKyAgICAgICAgICAgIGZvbGxvd2VkX2J5X3doaXRlc3BhY2UgPSAoaW5kZXgrMSA+PSBsZW4oc2NhbGFyKSBvcgorICAgICAgICAgICAgICAgICAgICBzY2FsYXJbaW5kZXgrMV0gaW4gJ1wwIFx0XHJcblx4ODVcdTIwMjhcdTIwMjknKQorCisgICAgICAgICMgTGV0J3MgZGVjaWRlIHdoYXQgc3R5bGVzIGFyZSBhbGxvd2VkLgorICAgICAgICBhbGxvd19mbG93X3BsYWluID0gVHJ1ZQorICAgICAgICBhbGxvd19ibG9ja19wbGFpbiA9IFRydWUKKyAgICAgICAgYWxsb3dfc2luZ2xlX3F1b3RlZCA9IFRydWUKKyAgICAgICAgYWxsb3dfZG91YmxlX3F1b3RlZCA9IFRydWUKKyAgICAgICAgYWxsb3dfYmxvY2sgPSBUcnVlCisKKyAgICAgICAgIyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgYmFkIGZvciBwbGFpbiBzY2FsYXJzLgorICAgICAgICBpZiAobGVhZGluZ19zcGFjZSBvciBsZWFkaW5nX2JyZWFrCisgICAgICAgICAgICAgICAgb3IgdHJhaWxpbmdfc3BhY2Ugb3IgdHJhaWxpbmdfYnJlYWspOgorICAgICAgICAgICAgYWxsb3dfZmxvd19wbGFpbiA9IGFsbG93X2Jsb2NrX3BsYWluID0gRmFsc2UKKworICAgICAgICAjIFdlIGRvIG5vdCBwZXJtaXQgdHJhaWxpbmcgc3BhY2VzIGZvciBibG9jayBzY2FsYXJzLgorICAgICAgICBpZiB0cmFpbGluZ19zcGFjZToKKyAgICAgICAgICAgIGFsbG93X2Jsb2NrID0gRmFsc2UKKworICAgICAgICAjIFNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGxpbmUgYXJlIG9ubHkgYWNjZXB0YWJsZSBmb3IgYmxvY2sKKyAgICAgICAgIyBzY2FsYXJzLgorICAgICAgICBpZiBicmVha19zcGFjZToKKyAgICAgICAgICAgIGFsbG93X2Zsb3dfcGxhaW4gPSBhbGxvd19ibG9ja19wbGFpbiA9IGFsbG93X3NpbmdsZV9xdW90ZWQgPSBGYWxzZQorCisgICAgICAgICMgU3BhY2VzIGZvbGxvd2VkIGJ5IGJyZWFrcywgYXMgd2VsbCBhcyBzcGVjaWFsIGNoYXJhY3RlciBhcmUgb25seQorICAgICAgICAjIGFsbG93ZWQgZm9yIGRvdWJsZSBxdW90ZWQgc2NhbGFycy4KKyAgICAgICAgaWYgc3BhY2VfYnJlYWsgb3Igc3BlY2lhbF9jaGFyYWN0ZXJzOgorICAgICAgICAgICAgYWxsb3dfZmxvd19wbGFpbiA9IGFsbG93X2Jsb2NrX3BsYWluID0gIFwKKyAgICAgICAgICAgIGFsbG93X3NpbmdsZV9xdW90ZWQgPSBhbGxvd19ibG9jayA9IEZhbHNlCisKKyAgICAgICAgIyBBbHRob3VnaCB0aGUgcGxhaW4gc2NhbGFyIHdyaXRlciBzdXBwb3J0cyBicmVha3MsIHdlIG5ldmVyIGVtaXQKKyAgICAgICAgIyBtdWx0aWxpbmUgcGxhaW4gc2NhbGFycy4KKyAgICAgICAgaWYgbGluZV9icmVha3M6CisgICAgICAgICAgICBhbGxvd19mbG93X3BsYWluID0gYWxsb3dfYmxvY2tfcGxhaW4gPSBGYWxzZQorCisgICAgICAgICMgRmxvdyBpbmRpY2F0b3JzIGFyZSBmb3JiaWRkZW4gZm9yIGZsb3cgcGxhaW4gc2NhbGFycy4KKyAgICAgICAgaWYgZmxvd19pbmRpY2F0b3JzOgorICAgICAgICAgICAgYWxsb3dfZmxvd19wbGFpbiA9IEZhbHNlCisKKyAgICAgICAgIyBCbG9jayBpbmRpY2F0b3JzIGFyZSBmb3JiaWRkZW4gZm9yIGJsb2NrIHBsYWluIHNjYWxhcnMuCisgICAgICAgIGlmIGJsb2NrX2luZGljYXRvcnM6CisgICAgICAgICAgICBhbGxvd19ibG9ja19wbGFpbiA9IEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFNjYWxhckFuYWx5c2lzKHNjYWxhcj1zY2FsYXIsCisgICAgICAgICAgICAgICAgZW1wdHk9RmFsc2UsIG11bHRpbGluZT1saW5lX2JyZWFrcywKKyAgICAgICAgICAgICAgICBhbGxvd19mbG93X3BsYWluPWFsbG93X2Zsb3dfcGxhaW4sCisgICAgICAgICAgICAgICAgYWxsb3dfYmxvY2tfcGxhaW49YWxsb3dfYmxvY2tfcGxhaW4sCisgICAgICAgICAgICAgICAgYWxsb3dfc2luZ2xlX3F1b3RlZD1hbGxvd19zaW5nbGVfcXVvdGVkLAorICAgICAgICAgICAgICAgIGFsbG93X2RvdWJsZV9xdW90ZWQ9YWxsb3dfZG91YmxlX3F1b3RlZCwKKyAgICAgICAgICAgICAgICBhbGxvd19ibG9jaz1hbGxvd19ibG9jaykKKworICAgICMgV3JpdGVycy4KKworICAgIGRlZiBmbHVzaF9zdHJlYW0oc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5zdHJlYW0sICdmbHVzaCcpOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIHdyaXRlX3N0cmVhbV9zdGFydChzZWxmKToKKyAgICAgICAgIyBXcml0ZSBCT00gaWYgbmVlZGVkLgorICAgICAgICBpZiBzZWxmLmVuY29kaW5nIGFuZCBzZWxmLmVuY29kaW5nLnN0YXJ0c3dpdGgoJ3V0Zi0xNicpOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJ1x1RkVGRicuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorCisgICAgZGVmIHdyaXRlX3N0cmVhbV9lbmQoc2VsZik6CisgICAgICAgIHNlbGYuZmx1c2hfc3RyZWFtKCkKKworICAgIGRlZiB3cml0ZV9pbmRpY2F0b3Ioc2VsZiwgaW5kaWNhdG9yLCBuZWVkX3doaXRlc3BhY2UsCisgICAgICAgICAgICB3aGl0ZXNwYWNlPUZhbHNlLCBpbmRlbnRpb249RmFsc2UpOgorICAgICAgICBpZiBzZWxmLndoaXRlc3BhY2Ugb3Igbm90IG5lZWRfd2hpdGVzcGFjZToKKyAgICAgICAgICAgIGRhdGEgPSBpbmRpY2F0b3IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSAnICcraW5kaWNhdG9yCisgICAgICAgIHNlbGYud2hpdGVzcGFjZSA9IHdoaXRlc3BhY2UKKyAgICAgICAgc2VsZi5pbmRlbnRpb24gPSBzZWxmLmluZGVudGlvbiBhbmQgaW5kZW50aW9uCisgICAgICAgIHNlbGYuY29sdW1uICs9IGxlbihkYXRhKQorICAgICAgICBzZWxmLm9wZW5fZW5kZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKGRhdGEpCisKKyAgICBkZWYgd3JpdGVfaW5kZW50KHNlbGYpOgorICAgICAgICBpbmRlbnQgPSBzZWxmLmluZGVudCBvciAwCisgICAgICAgIGlmIG5vdCBzZWxmLmluZGVudGlvbiBvciBzZWxmLmNvbHVtbiA+IGluZGVudCAgIFwKKyAgICAgICAgICAgICAgICBvciAoc2VsZi5jb2x1bW4gPT0gaW5kZW50IGFuZCBub3Qgc2VsZi53aGl0ZXNwYWNlKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZV9icmVhaygpCisgICAgICAgIGlmIHNlbGYuY29sdW1uIDwgaW5kZW50OgorICAgICAgICAgICAgc2VsZi53aGl0ZXNwYWNlID0gVHJ1ZQorICAgICAgICAgICAgZGF0YSA9ICcgJyooaW5kZW50LXNlbGYuY29sdW1uKQorICAgICAgICAgICAgc2VsZi5jb2x1bW4gPSBpbmRlbnQKKyAgICAgICAgICAgIGlmIHNlbGYuZW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShkYXRhKQorCisgICAgZGVmIHdyaXRlX2xpbmVfYnJlYWsoc2VsZiwgZGF0YT1Ob25lKToKKyAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuYmVzdF9saW5lX2JyZWFrCisgICAgICAgIHNlbGYud2hpdGVzcGFjZSA9IFRydWUKKyAgICAgICAgc2VsZi5pbmRlbnRpb24gPSBUcnVlCisgICAgICAgIHNlbGYubGluZSArPSAxCisgICAgICAgIHNlbGYuY29sdW1uID0gMAorICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKGRhdGEpCisKKyAgICBkZWYgd3JpdGVfdmVyc2lvbl9kaXJlY3RpdmUoc2VsZiwgdmVyc2lvbl90ZXh0KToKKyAgICAgICAgZGF0YSA9ICclJVlBTUwgJXMnICUgdmVyc2lvbl90ZXh0CisgICAgICAgIGlmIHNlbGYuZW5jb2Rpbmc6CisgICAgICAgICAgICBkYXRhID0gZGF0YS5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi53cml0ZV9saW5lX2JyZWFrKCkKKworICAgIGRlZiB3cml0ZV90YWdfZGlyZWN0aXZlKHNlbGYsIGhhbmRsZV90ZXh0LCBwcmVmaXhfdGV4dCk6CisgICAgICAgIGRhdGEgPSAnJSVUQUcgJXMgJXMnICUgKGhhbmRsZV90ZXh0LCBwcmVmaXhfdGV4dCkKKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICBzZWxmLndyaXRlX2xpbmVfYnJlYWsoKQorCisgICAgIyBTY2FsYXIgc3RyZWFtcy4KKworICAgIGRlZiB3cml0ZV9zaW5nbGVfcXVvdGVkKHNlbGYsIHRleHQsIHNwbGl0PVRydWUpOgorICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignXCcnLCBUcnVlKQorICAgICAgICBzcGFjZXMgPSBGYWxzZQorICAgICAgICBicmVha3MgPSBGYWxzZQorICAgICAgICBzdGFydCA9IGVuZCA9IDAKKyAgICAgICAgd2hpbGUgZW5kIDw9IGxlbih0ZXh0KToKKyAgICAgICAgICAgIGNoID0gTm9uZQorICAgICAgICAgICAgaWYgZW5kIDwgbGVuKHRleHQpOgorICAgICAgICAgICAgICAgIGNoID0gdGV4dFtlbmRdCisgICAgICAgICAgICBpZiBzcGFjZXM6CisgICAgICAgICAgICAgICAgaWYgY2ggaXMgTm9uZSBvciBjaCAhPSAnICc6CisgICAgICAgICAgICAgICAgICAgIGlmIHN0YXJ0KzEgPT0gZW5kIGFuZCBzZWxmLmNvbHVtbiA+IHNlbGYuYmVzdF93aWR0aCBhbmQgc3BsaXQgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN0YXJ0ICE9IDAgYW5kIGVuZCAhPSBsZW4odGV4dCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGVudCgpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGV4dFtzdGFydDplbmRdCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbiArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZAorICAgICAgICAgICAgZWxpZiBicmVha3M6CisgICAgICAgICAgICAgICAgaWYgY2ggaXMgTm9uZSBvciBjaCBub3QgaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgICAgIGlmIHRleHRbc3RhcnRdID09ICdcbic6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmVfYnJlYWsoKQorICAgICAgICAgICAgICAgICAgICBmb3IgYnIgaW4gdGV4dFtzdGFydDplbmRdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnIgPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmVfYnJlYWsoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmVfYnJlYWsoYnIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBlbmQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgY2ggaXMgTm9uZSBvciBjaCBpbiAnIFxuXHg4NVx1MjAyOFx1MjAyOScgb3IgY2ggPT0gJ1wnJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RhcnQgPCBlbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGV4dFtzdGFydDplbmRdCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbiArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBlbmQKKyAgICAgICAgICAgIGlmIGNoID09ICdcJyc6CisgICAgICAgICAgICAgICAgZGF0YSA9ICdcJ1wnJworICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uICs9IDIKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kICsgMQorICAgICAgICAgICAgaWYgY2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3BhY2VzID0gKGNoID09ICcgJykKKyAgICAgICAgICAgICAgICBicmVha3MgPSAoY2ggaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOScpCisgICAgICAgICAgICBlbmQgKz0gMQorICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignXCcnLCBGYWxzZSkKKworICAgIEVTQ0FQRV9SRVBMQUNFTUVOVFMgPSB7CisgICAgICAgICdcMCc6ICAgICAgICcwJywKKyAgICAgICAgJ1x4MDcnOiAgICAgJ2EnLAorICAgICAgICAnXHgwOCc6ICAgICAnYicsCisgICAgICAgICdceDA5JzogICAgICd0JywKKyAgICAgICAgJ1x4MEEnOiAgICAgJ24nLAorICAgICAgICAnXHgwQic6ICAgICAndicsCisgICAgICAgICdceDBDJzogICAgICdmJywKKyAgICAgICAgJ1x4MEQnOiAgICAgJ3InLAorICAgICAgICAnXHgxQic6ICAgICAnZScsCisgICAgICAgICdcIic6ICAgICAgICdcIicsCisgICAgICAgICdcXCc6ICAgICAgICdcXCcsCisgICAgICAgICdceDg1JzogICAgICdOJywKKyAgICAgICAgJ1x4QTAnOiAgICAgJ18nLAorICAgICAgICAnXHUyMDI4JzogICAnTCcsCisgICAgICAgICdcdTIwMjknOiAgICdQJywKKyAgICB9CisKKyAgICBkZWYgd3JpdGVfZG91YmxlX3F1b3RlZChzZWxmLCB0ZXh0LCBzcGxpdD1UcnVlKToKKyAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJyInLCBUcnVlKQorICAgICAgICBzdGFydCA9IGVuZCA9IDAKKyAgICAgICAgd2hpbGUgZW5kIDw9IGxlbih0ZXh0KToKKyAgICAgICAgICAgIGNoID0gTm9uZQorICAgICAgICAgICAgaWYgZW5kIDwgbGVuKHRleHQpOgorICAgICAgICAgICAgICAgIGNoID0gdGV4dFtlbmRdCisgICAgICAgICAgICBpZiBjaCBpcyBOb25lIG9yIGNoIGluICciXFxceDg1XHUyMDI4XHUyMDI5XHVGRUZGJyBcCisgICAgICAgICAgICAgICAgICAgIG9yIG5vdCAoJ1x4MjAnIDw9IGNoIDw9ICdceDdFJworICAgICAgICAgICAgICAgICAgICAgICAgb3IgKHNlbGYuYWxsb3dfdW5pY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAoJ1x4QTAnIDw9IGNoIDw9ICdcdUQ3RkYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdcdUUwMDAnIDw9IGNoIDw9ICdcdUZGRkQnKSkpOgorICAgICAgICAgICAgICAgIGlmIHN0YXJ0IDwgZW5kOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGV4dFtzdGFydDplbmRdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uICs9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kCisgICAgICAgICAgICAgICAgaWYgY2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGNoIGluIHNlbGYuRVNDQVBFX1JFUExBQ0VNRU5UUzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAnXFwnK3NlbGYuRVNDQVBFX1JFUExBQ0VNRU5UU1tjaF0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjaCA8PSAnXHhGRic6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gJ1xceCUwMlgnICUgb3JkKGNoKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGNoIDw9ICdcdUZGRkYnOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICdcXHUlMDRYJyAlIG9yZChjaCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAnXFxVJTA4WCcgJSBvcmQoY2gpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uICs9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kKzEKKyAgICAgICAgICAgIGlmIDAgPCBlbmQgPCBsZW4odGV4dCktMSBhbmQgKGNoID09ICcgJyBvciBzdGFydCA+PSBlbmQpICAgIFwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYuY29sdW1uKyhlbmQtc3RhcnQpID4gc2VsZi5iZXN0X3dpZHRoIGFuZCBzcGxpdDoKKyAgICAgICAgICAgICAgICBkYXRhID0gdGV4dFtzdGFydDplbmRdKydcXCcKKyAgICAgICAgICAgICAgICBpZiBzdGFydCA8IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBlbmQKKyAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbiArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgICAgICBzZWxmLndoaXRlc3BhY2UgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuaW5kZW50aW9uID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiB0ZXh0W3N0YXJ0XSA9PSAnICc6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAnXFwnCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uICs9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKGRhdGEpCisgICAgICAgICAgICBlbmQgKz0gMQorICAgICAgICBzZWxmLndyaXRlX2luZGljYXRvcignIicsIEZhbHNlKQorCisgICAgZGVmIGRldGVybWluZV9ibG9ja19oaW50cyhzZWxmLCB0ZXh0KToKKyAgICAgICAgaGludHMgPSAnJworICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgaWYgdGV4dFswXSBpbiAnIFxuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgaGludHMgKz0gc3RyKHNlbGYuYmVzdF9pbmRlbnQpCisgICAgICAgICAgICBpZiB0ZXh0Wy0xXSBub3QgaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgaGludHMgKz0gJy0nCisgICAgICAgICAgICBlbGlmIGxlbih0ZXh0KSA9PSAxIG9yIHRleHRbLTJdIGluICdcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgICAgIGhpbnRzICs9ICcrJworICAgICAgICByZXR1cm4gaGludHMKKworICAgIGRlZiB3cml0ZV9mb2xkZWQoc2VsZiwgdGV4dCk6CisgICAgICAgIGhpbnRzID0gc2VsZi5kZXRlcm1pbmVfYmxvY2tfaGludHModGV4dCkKKyAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJz4nK2hpbnRzLCBUcnVlKQorICAgICAgICBpZiBoaW50c1stMTpdID09ICcrJzoKKyAgICAgICAgICAgIHNlbGYub3Blbl9lbmRlZCA9IFRydWUKKyAgICAgICAgc2VsZi53cml0ZV9saW5lX2JyZWFrKCkKKyAgICAgICAgbGVhZGluZ19zcGFjZSA9IFRydWUKKyAgICAgICAgc3BhY2VzID0gRmFsc2UKKyAgICAgICAgYnJlYWtzID0gVHJ1ZQorICAgICAgICBzdGFydCA9IGVuZCA9IDAKKyAgICAgICAgd2hpbGUgZW5kIDw9IGxlbih0ZXh0KToKKyAgICAgICAgICAgIGNoID0gTm9uZQorICAgICAgICAgICAgaWYgZW5kIDwgbGVuKHRleHQpOgorICAgICAgICAgICAgICAgIGNoID0gdGV4dFtlbmRdCisgICAgICAgICAgICBpZiBicmVha3M6CisgICAgICAgICAgICAgICAgaWYgY2ggaXMgTm9uZSBvciBjaCBub3QgaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsZWFkaW5nX3NwYWNlIGFuZCBjaCBpcyBub3QgTm9uZSBhbmQgY2ggIT0gJyAnICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0ZXh0W3N0YXJ0XSA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lX2JyZWFrKCkKKyAgICAgICAgICAgICAgICAgICAgbGVhZGluZ19zcGFjZSA9IChjaCA9PSAnICcpCisgICAgICAgICAgICAgICAgICAgIGZvciBiciBpbiB0ZXh0W3N0YXJ0OmVuZF06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiciA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZV9icmVhaygpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZV9icmVhayhicikKKyAgICAgICAgICAgICAgICAgICAgaWYgY2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGVudCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kCisgICAgICAgICAgICBlbGlmIHNwYWNlczoKKyAgICAgICAgICAgICAgICBpZiBjaCAhPSAnICc6CisgICAgICAgICAgICAgICAgICAgIGlmIHN0YXJ0KzEgPT0gZW5kIGFuZCBzZWxmLmNvbHVtbiA+IHNlbGYuYmVzdF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZXh0W3N0YXJ0OmVuZF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uICs9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGNoIGlzIE5vbmUgb3IgY2ggaW4gJyBcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGV4dFtzdGFydDplbmRdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uICs9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGlmIGNoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmVfYnJlYWsoKQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZAorICAgICAgICAgICAgaWYgY2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWtzID0gKGNoIGluICdcblx4ODVcdTIwMjhcdTIwMjknKQorICAgICAgICAgICAgICAgIHNwYWNlcyA9IChjaCA9PSAnICcpCisgICAgICAgICAgICBlbmQgKz0gMQorCisgICAgZGVmIHdyaXRlX2xpdGVyYWwoc2VsZiwgdGV4dCk6CisgICAgICAgIGhpbnRzID0gc2VsZi5kZXRlcm1pbmVfYmxvY2tfaGludHModGV4dCkKKyAgICAgICAgc2VsZi53cml0ZV9pbmRpY2F0b3IoJ3wnK2hpbnRzLCBUcnVlKQorICAgICAgICBpZiBoaW50c1stMTpdID09ICcrJzoKKyAgICAgICAgICAgIHNlbGYub3Blbl9lbmRlZCA9IFRydWUKKyAgICAgICAgc2VsZi53cml0ZV9saW5lX2JyZWFrKCkKKyAgICAgICAgYnJlYWtzID0gVHJ1ZQorICAgICAgICBzdGFydCA9IGVuZCA9IDAKKyAgICAgICAgd2hpbGUgZW5kIDw9IGxlbih0ZXh0KToKKyAgICAgICAgICAgIGNoID0gTm9uZQorICAgICAgICAgICAgaWYgZW5kIDwgbGVuKHRleHQpOgorICAgICAgICAgICAgICAgIGNoID0gdGV4dFtlbmRdCisgICAgICAgICAgICBpZiBicmVha3M6CisgICAgICAgICAgICAgICAgaWYgY2ggaXMgTm9uZSBvciBjaCBub3QgaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgICAgIGZvciBiciBpbiB0ZXh0W3N0YXJ0OmVuZF06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiciA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZV9icmVhaygpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZV9icmVhayhicikKKyAgICAgICAgICAgICAgICAgICAgaWYgY2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2luZGVudCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGNoIGlzIE5vbmUgb3IgY2ggaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZXh0W3N0YXJ0OmVuZF0KKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgICAgICBpZiBjaCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lX2JyZWFrKCkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBlbmQKKyAgICAgICAgICAgIGlmIGNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrcyA9IChjaCBpbiAnXG5ceDg1XHUyMDI4XHUyMDI5JykKKyAgICAgICAgICAgIGVuZCArPSAxCisKKyAgICBkZWYgd3JpdGVfcGxhaW4oc2VsZiwgdGV4dCwgc3BsaXQ9VHJ1ZSk6CisgICAgICAgIGlmIHNlbGYucm9vdF9jb250ZXh0OgorICAgICAgICAgICAgc2VsZi5vcGVuX2VuZGVkID0gVHJ1ZQorICAgICAgICBpZiBub3QgdGV4dDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3Qgc2VsZi53aGl0ZXNwYWNlOgorICAgICAgICAgICAgZGF0YSA9ICcgJworICAgICAgICAgICAgc2VsZi5jb2x1bW4gKz0gbGVuKGRhdGEpCisgICAgICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi53aGl0ZXNwYWNlID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbmRlbnRpb24gPSBGYWxzZQorICAgICAgICBzcGFjZXMgPSBGYWxzZQorICAgICAgICBicmVha3MgPSBGYWxzZQorICAgICAgICBzdGFydCA9IGVuZCA9IDAKKyAgICAgICAgd2hpbGUgZW5kIDw9IGxlbih0ZXh0KToKKyAgICAgICAgICAgIGNoID0gTm9uZQorICAgICAgICAgICAgaWYgZW5kIDwgbGVuKHRleHQpOgorICAgICAgICAgICAgICAgIGNoID0gdGV4dFtlbmRdCisgICAgICAgICAgICBpZiBzcGFjZXM6CisgICAgICAgICAgICAgICAgaWYgY2ggIT0gJyAnOgorICAgICAgICAgICAgICAgICAgICBpZiBzdGFydCsxID09IGVuZCBhbmQgc2VsZi5jb2x1bW4gPiBzZWxmLmJlc3Rfd2lkdGggYW5kIHNwbGl0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9pbmRlbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53aGl0ZXNwYWNlID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZW50aW9uID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZXh0W3N0YXJ0OmVuZF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uICs9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kCisgICAgICAgICAgICBlbGlmIGJyZWFrczoKKyAgICAgICAgICAgICAgICBpZiBjaCBub3QgaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgICAgIGlmIHRleHRbc3RhcnRdID09ICdcbic6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmVfYnJlYWsoKQorICAgICAgICAgICAgICAgICAgICBmb3IgYnIgaW4gdGV4dFtzdGFydDplbmRdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnIgPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmVfYnJlYWsoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmVfYnJlYWsoYnIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaW5kZW50KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53aGl0ZXNwYWNlID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRlbnRpb24gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBjaCBpcyBOb25lIG9yIGNoIGluICcgXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRleHRbc3RhcnQ6ZW5kXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbiArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZAorICAgICAgICAgICAgaWYgY2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3BhY2VzID0gKGNoID09ICcgJykKKyAgICAgICAgICAgICAgICBicmVha3MgPSAoY2ggaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOScpCisgICAgICAgICAgICBlbmQgKz0gMQpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvZXJyb3IucHkgYi9saWIveWFtbC9lcnJvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzk2YjRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvZXJyb3IucHkKQEAgLTAsMCArMSw3NSBAQAorCitfX2FsbF9fID0gWydNYXJrJywgJ1lBTUxFcnJvcicsICdNYXJrZWRZQU1MRXJyb3InXQorCitjbGFzcyBNYXJrOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGluZGV4LCBsaW5lLCBjb2x1bW4sIGJ1ZmZlciwgcG9pbnRlcik6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5pbmRleCA9IGluZGV4CisgICAgICAgIHNlbGYubGluZSA9IGxpbmUKKyAgICAgICAgc2VsZi5jb2x1bW4gPSBjb2x1bW4KKyAgICAgICAgc2VsZi5idWZmZXIgPSBidWZmZXIKKyAgICAgICAgc2VsZi5wb2ludGVyID0gcG9pbnRlcgorCisgICAgZGVmIGdldF9zbmlwcGV0KHNlbGYsIGluZGVudD00LCBtYXhfbGVuZ3RoPTc1KToKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGhlYWQgPSAnJworICAgICAgICBzdGFydCA9IHNlbGYucG9pbnRlcgorICAgICAgICB3aGlsZSBzdGFydCA+IDAgYW5kIHNlbGYuYnVmZmVyW3N0YXJ0LTFdIG5vdCBpbiAnXDBcclxuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICBzdGFydCAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLnBvaW50ZXItc3RhcnQgPiBtYXhfbGVuZ3RoLzItMToKKyAgICAgICAgICAgICAgICBoZWFkID0gJyAuLi4gJworICAgICAgICAgICAgICAgIHN0YXJ0ICs9IDUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICB0YWlsID0gJycKKyAgICAgICAgZW5kID0gc2VsZi5wb2ludGVyCisgICAgICAgIHdoaWxlIGVuZCA8IGxlbihzZWxmLmJ1ZmZlcikgYW5kIHNlbGYuYnVmZmVyW2VuZF0gbm90IGluICdcMFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgIGVuZCArPSAxCisgICAgICAgICAgICBpZiBlbmQtc2VsZi5wb2ludGVyID4gbWF4X2xlbmd0aC8yLTE6CisgICAgICAgICAgICAgICAgdGFpbCA9ICcgLi4uICcKKyAgICAgICAgICAgICAgICBlbmQgLT0gNQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNuaXBwZXQgPSBzZWxmLmJ1ZmZlcltzdGFydDplbmRdCisgICAgICAgIHJldHVybiAnICcqaW5kZW50ICsgaGVhZCArIHNuaXBwZXQgKyB0YWlsICsgJ1xuJyAgXAorICAgICAgICAgICAgICAgICsgJyAnKihpbmRlbnQrc2VsZi5wb2ludGVyLXN0YXJ0K2xlbihoZWFkKSkgKyAnXicKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBzbmlwcGV0ID0gc2VsZi5nZXRfc25pcHBldCgpCisgICAgICAgIHdoZXJlID0gIiAgaW4gXCIlc1wiLCBsaW5lICVkLCBjb2x1bW4gJWQiICAgXAorICAgICAgICAgICAgICAgICUgKHNlbGYubmFtZSwgc2VsZi5saW5lKzEsIHNlbGYuY29sdW1uKzEpCisgICAgICAgIGlmIHNuaXBwZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aGVyZSArPSAiOlxuIitzbmlwcGV0CisgICAgICAgIHJldHVybiB3aGVyZQorCitjbGFzcyBZQU1MRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIE1hcmtlZFlBTUxFcnJvcihZQU1MRXJyb3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRleHQ9Tm9uZSwgY29udGV4dF9tYXJrPU5vbmUsCisgICAgICAgICAgICBwcm9ibGVtPU5vbmUsIHByb2JsZW1fbWFyaz1Ob25lLCBub3RlPU5vbmUpOgorICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CisgICAgICAgIHNlbGYuY29udGV4dF9tYXJrID0gY29udGV4dF9tYXJrCisgICAgICAgIHNlbGYucHJvYmxlbSA9IHByb2JsZW0KKyAgICAgICAgc2VsZi5wcm9ibGVtX21hcmsgPSBwcm9ibGVtX21hcmsKKyAgICAgICAgc2VsZi5ub3RlID0gbm90ZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuY29udGV4dCkKKyAgICAgICAgaWYgc2VsZi5jb250ZXh0X21hcmsgaXMgbm90IE5vbmUgIFwKKyAgICAgICAgICAgIGFuZCAoc2VsZi5wcm9ibGVtIGlzIE5vbmUgb3Igc2VsZi5wcm9ibGVtX21hcmsgaXMgTm9uZQorICAgICAgICAgICAgICAgICAgICBvciBzZWxmLmNvbnRleHRfbWFyay5uYW1lICE9IHNlbGYucHJvYmxlbV9tYXJrLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgb3Igc2VsZi5jb250ZXh0X21hcmsubGluZSAhPSBzZWxmLnByb2JsZW1fbWFyay5saW5lCisgICAgICAgICAgICAgICAgICAgIG9yIHNlbGYuY29udGV4dF9tYXJrLmNvbHVtbiAhPSBzZWxmLnByb2JsZW1fbWFyay5jb2x1bW4pOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHN0cihzZWxmLmNvbnRleHRfbWFyaykpCisgICAgICAgIGlmIHNlbGYucHJvYmxlbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLnByb2JsZW0pCisgICAgICAgIGlmIHNlbGYucHJvYmxlbV9tYXJrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHN0cihzZWxmLnByb2JsZW1fbWFyaykpCisgICAgICAgIGlmIHNlbGYubm90ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLm5vdGUpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKZGlmZiAtLWdpdCBhL2xpYi95YW1sL2V2ZW50cy5weSBiL2xpYi95YW1sL2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzlhZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvZXZlbnRzLnB5CkBAIC0wLDAgKzEsODYgQEAKKworIyBBYnN0cmFjdCBjbGFzc2VzLgorCitjbGFzcyBFdmVudChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydF9tYXJrPU5vbmUsIGVuZF9tYXJrPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXJ0X21hcmsgPSBzdGFydF9tYXJrCisgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgYXR0cmlidXRlcyA9IFtrZXkgZm9yIGtleSBpbiBbJ2FuY2hvcicsICd0YWcnLCAnaW1wbGljaXQnLCAndmFsdWUnXQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwga2V5KV0KKyAgICAgICAgYXJndW1lbnRzID0gJywgJy5qb2luKFsnJXM9JXInICUgKGtleSwgZ2V0YXR0cihzZWxmLCBrZXkpKQorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gYXR0cmlidXRlc10pCisgICAgICAgIHJldHVybiAnJXMoJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXJndW1lbnRzKQorCitjbGFzcyBOb2RlRXZlbnQoRXZlbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbmNob3IsIHN0YXJ0X21hcms9Tm9uZSwgZW5kX21hcms9Tm9uZSk6CisgICAgICAgIHNlbGYuYW5jaG9yID0gYW5jaG9yCisgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisKK2NsYXNzIENvbGxlY3Rpb25TdGFydEV2ZW50KE5vZGVFdmVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFuY2hvciwgdGFnLCBpbXBsaWNpdCwgc3RhcnRfbWFyaz1Ob25lLCBlbmRfbWFyaz1Ob25lLAorICAgICAgICAgICAgZmxvd19zdHlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5hbmNob3IgPSBhbmNob3IKKyAgICAgICAgc2VsZi50YWcgPSB0YWcKKyAgICAgICAgc2VsZi5pbXBsaWNpdCA9IGltcGxpY2l0CisgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisgICAgICAgIHNlbGYuZmxvd19zdHlsZSA9IGZsb3dfc3R5bGUKKworY2xhc3MgQ29sbGVjdGlvbkVuZEV2ZW50KEV2ZW50KToKKyAgICBwYXNzCisKKyMgSW1wbGVtZW50YXRpb25zLgorCitjbGFzcyBTdHJlYW1TdGFydEV2ZW50KEV2ZW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRfbWFyaz1Ob25lLCBlbmRfbWFyaz1Ob25lLCBlbmNvZGluZz1Ob25lKToKKyAgICAgICAgc2VsZi5zdGFydF9tYXJrID0gc3RhcnRfbWFyaworICAgICAgICBzZWxmLmVuZF9tYXJrID0gZW5kX21hcmsKKyAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKK2NsYXNzIFN0cmVhbUVuZEV2ZW50KEV2ZW50KToKKyAgICBwYXNzCisKK2NsYXNzIERvY3VtZW50U3RhcnRFdmVudChFdmVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0X21hcms9Tm9uZSwgZW5kX21hcms9Tm9uZSwKKyAgICAgICAgICAgIGV4cGxpY2l0PU5vbmUsIHZlcnNpb249Tm9uZSwgdGFncz1Ob25lKToKKyAgICAgICAgc2VsZi5zdGFydF9tYXJrID0gc3RhcnRfbWFyaworICAgICAgICBzZWxmLmVuZF9tYXJrID0gZW5kX21hcmsKKyAgICAgICAgc2VsZi5leHBsaWNpdCA9IGV4cGxpY2l0CisgICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKyAgICAgICAgc2VsZi50YWdzID0gdGFncworCitjbGFzcyBEb2N1bWVudEVuZEV2ZW50KEV2ZW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRfbWFyaz1Ob25lLCBlbmRfbWFyaz1Ob25lLAorICAgICAgICAgICAgZXhwbGljaXQ9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisgICAgICAgIHNlbGYuZXhwbGljaXQgPSBleHBsaWNpdAorCitjbGFzcyBBbGlhc0V2ZW50KE5vZGVFdmVudCk6CisgICAgcGFzcworCitjbGFzcyBTY2FsYXJFdmVudChOb2RlRXZlbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbmNob3IsIHRhZywgaW1wbGljaXQsIHZhbHVlLAorICAgICAgICAgICAgc3RhcnRfbWFyaz1Ob25lLCBlbmRfbWFyaz1Ob25lLCBzdHlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5hbmNob3IgPSBhbmNob3IKKyAgICAgICAgc2VsZi50YWcgPSB0YWcKKyAgICAgICAgc2VsZi5pbXBsaWNpdCA9IGltcGxpY2l0CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLnN0YXJ0X21hcmsgPSBzdGFydF9tYXJrCisgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworICAgICAgICBzZWxmLnN0eWxlID0gc3R5bGUKKworY2xhc3MgU2VxdWVuY2VTdGFydEV2ZW50KENvbGxlY3Rpb25TdGFydEV2ZW50KToKKyAgICBwYXNzCisKK2NsYXNzIFNlcXVlbmNlRW5kRXZlbnQoQ29sbGVjdGlvbkVuZEV2ZW50KToKKyAgICBwYXNzCisKK2NsYXNzIE1hcHBpbmdTdGFydEV2ZW50KENvbGxlY3Rpb25TdGFydEV2ZW50KToKKyAgICBwYXNzCisKK2NsYXNzIE1hcHBpbmdFbmRFdmVudChDb2xsZWN0aW9uRW5kRXZlbnQpOgorICAgIHBhc3MKKwpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvbG9hZGVyLnB5IGIvbGliL3lhbWwvbG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MGMxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveWFtbC9sb2FkZXIucHkKQEAgLTAsMCArMSw2MyBAQAorCitfX2FsbF9fID0gWydCYXNlTG9hZGVyJywgJ0Z1bGxMb2FkZXInLCAnU2FmZUxvYWRlcicsICdMb2FkZXInLCAnVW5zYWZlTG9hZGVyJ10KKworZnJvbSAucmVhZGVyIGltcG9ydCAqCitmcm9tIC5zY2FubmVyIGltcG9ydCAqCitmcm9tIC5wYXJzZXIgaW1wb3J0ICoKK2Zyb20gLmNvbXBvc2VyIGltcG9ydCAqCitmcm9tIC5jb25zdHJ1Y3RvciBpbXBvcnQgKgorZnJvbSAucmVzb2x2ZXIgaW1wb3J0ICoKKworY2xhc3MgQmFzZUxvYWRlcihSZWFkZXIsIFNjYW5uZXIsIFBhcnNlciwgQ29tcG9zZXIsIEJhc2VDb25zdHJ1Y3RvciwgQmFzZVJlc29sdmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBSZWFkZXIuX19pbml0X18oc2VsZiwgc3RyZWFtKQorICAgICAgICBTY2FubmVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFBhcnNlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBDb21wb3Nlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBCYXNlQ29uc3RydWN0b3IuX19pbml0X18oc2VsZikKKyAgICAgICAgQmFzZVJlc29sdmVyLl9faW5pdF9fKHNlbGYpCisKK2NsYXNzIEZ1bGxMb2FkZXIoUmVhZGVyLCBTY2FubmVyLCBQYXJzZXIsIENvbXBvc2VyLCBGdWxsQ29uc3RydWN0b3IsIFJlc29sdmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBSZWFkZXIuX19pbml0X18oc2VsZiwgc3RyZWFtKQorICAgICAgICBTY2FubmVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFBhcnNlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBDb21wb3Nlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBGdWxsQ29uc3RydWN0b3IuX19pbml0X18oc2VsZikKKyAgICAgICAgUmVzb2x2ZXIuX19pbml0X18oc2VsZikKKworY2xhc3MgU2FmZUxvYWRlcihSZWFkZXIsIFNjYW5uZXIsIFBhcnNlciwgQ29tcG9zZXIsIFNhZmVDb25zdHJ1Y3RvciwgUmVzb2x2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSk6CisgICAgICAgIFJlYWRlci5fX2luaXRfXyhzZWxmLCBzdHJlYW0pCisgICAgICAgIFNjYW5uZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgUGFyc2VyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIENvbXBvc2VyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFNhZmVDb25zdHJ1Y3Rvci5fX2luaXRfXyhzZWxmKQorICAgICAgICBSZXNvbHZlci5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBMb2FkZXIoUmVhZGVyLCBTY2FubmVyLCBQYXJzZXIsIENvbXBvc2VyLCBDb25zdHJ1Y3RvciwgUmVzb2x2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSk6CisgICAgICAgIFJlYWRlci5fX2luaXRfXyhzZWxmLCBzdHJlYW0pCisgICAgICAgIFNjYW5uZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgUGFyc2VyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIENvbXBvc2VyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIENvbnN0cnVjdG9yLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFJlc29sdmVyLl9faW5pdF9fKHNlbGYpCisKKyMgVW5zYWZlTG9hZGVyIGlzIHRoZSBzYW1lIGFzIExvYWRlciAod2hpY2ggaXMgYW5kIHdhcyBhbHdheXMgdW5zYWZlIG9uCisjIHVudHJ1c3RlZCBpbnB1dCkuIFVzZSBvZiBlaXRoZXIgTG9hZGVyIG9yIFVuc2FmZUxvYWRlciBzaG91bGQgYmUgcmFyZSwgc2luY2UKKyMgRnVsbExvYWQgc2hvdWxkIGJlIGFibGUgdG8gbG9hZCBhbG1vc3QgYWxsIFlBTUwgc2FmZWx5LiBMb2FkZXIgaXMgbGVmdCBpbnRhY3QKKyMgdG8gZW5zdXJlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorY2xhc3MgVW5zYWZlTG9hZGVyKFJlYWRlciwgU2Nhbm5lciwgUGFyc2VyLCBDb21wb3NlciwgQ29uc3RydWN0b3IsIFJlc29sdmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBSZWFkZXIuX19pbml0X18oc2VsZiwgc3RyZWFtKQorICAgICAgICBTY2FubmVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFBhcnNlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBDb21wb3Nlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBDb25zdHJ1Y3Rvci5fX2luaXRfXyhzZWxmKQorICAgICAgICBSZXNvbHZlci5fX2luaXRfXyhzZWxmKQpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvbm9kZXMucHkgYi9saWIveWFtbC9ub2Rlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGYwNzBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvbm9kZXMucHkKQEAgLTAsMCArMSw0OSBAQAorCitjbGFzcyBOb2RlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgdmFsdWUsIHN0YXJ0X21hcmssIGVuZF9tYXJrKToKKyAgICAgICAgc2VsZi50YWcgPSB0YWcKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICB2YWx1ZSA9IHNlbGYudmFsdWUKKyAgICAgICAgI2lmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAjICAgIGlmIGxlbih2YWx1ZSkgPT0gMDoKKyAgICAgICAgIyAgICAgICAgdmFsdWUgPSAnPGVtcHR5PicKKyAgICAgICAgIyAgICBlbGlmIGxlbih2YWx1ZSkgPT0gMToKKyAgICAgICAgIyAgICAgICAgdmFsdWUgPSAnPDEgaXRlbT4nCisgICAgICAgICMgICAgZWxzZToKKyAgICAgICAgIyAgICAgICAgdmFsdWUgPSAnPCVkIGl0ZW1zPicgJSBsZW4odmFsdWUpCisgICAgICAgICNlbHNlOgorICAgICAgICAjICAgIGlmIGxlbih2YWx1ZSkgPiA3NToKKyAgICAgICAgIyAgICAgICAgdmFsdWUgPSByZXByKHZhbHVlWzo3MF0rdScgLi4uICcpCisgICAgICAgICMgICAgZWxzZToKKyAgICAgICAgIyAgICAgICAgdmFsdWUgPSByZXByKHZhbHVlKQorICAgICAgICB2YWx1ZSA9IHJlcHIodmFsdWUpCisgICAgICAgIHJldHVybiAnJXModGFnPSVyLCB2YWx1ZT0lcyknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLnRhZywgdmFsdWUpCisKK2NsYXNzIFNjYWxhck5vZGUoTm9kZSk6CisgICAgaWQgPSAnc2NhbGFyJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIHZhbHVlLAorICAgICAgICAgICAgc3RhcnRfbWFyaz1Ob25lLCBlbmRfbWFyaz1Ob25lLCBzdHlsZT1Ob25lKToKKyAgICAgICAgc2VsZi50YWcgPSB0YWcKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisgICAgICAgIHNlbGYuc3R5bGUgPSBzdHlsZQorCitjbGFzcyBDb2xsZWN0aW9uTm9kZShOb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFnLCB2YWx1ZSwKKyAgICAgICAgICAgIHN0YXJ0X21hcms9Tm9uZSwgZW5kX21hcms9Tm9uZSwgZmxvd19zdHlsZT1Ob25lKToKKyAgICAgICAgc2VsZi50YWcgPSB0YWcKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisgICAgICAgIHNlbGYuZmxvd19zdHlsZSA9IGZsb3dfc3R5bGUKKworY2xhc3MgU2VxdWVuY2VOb2RlKENvbGxlY3Rpb25Ob2RlKToKKyAgICBpZCA9ICdzZXF1ZW5jZScKKworY2xhc3MgTWFwcGluZ05vZGUoQ29sbGVjdGlvbk5vZGUpOgorICAgIGlkID0gJ21hcHBpbmcnCisKZGlmZiAtLWdpdCBhL2xpYi95YW1sL3BhcnNlci5weSBiL2xpYi95YW1sL3BhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2E1OTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvcGFyc2VyLnB5CkBAIC0wLDAgKzEsNTg5IEBACisKKyMgVGhlIGZvbGxvd2luZyBZQU1MIGdyYW1tYXIgaXMgTEwoMSkgYW5kIGlzIHBhcnNlZCBieSBhIHJlY3Vyc2l2ZSBkZXNjZW50CisjIHBhcnNlci4KKyMKKyMgc3RyZWFtICAgICAgICAgICAgOjo9IFNUUkVBTS1TVEFSVCBpbXBsaWNpdF9kb2N1bWVudD8gZXhwbGljaXRfZG9jdW1lbnQqIFNUUkVBTS1FTkQKKyMgaW1wbGljaXRfZG9jdW1lbnQgOjo9IGJsb2NrX25vZGUgRE9DVU1FTlQtRU5EKgorIyBleHBsaWNpdF9kb2N1bWVudCA6Oj0gRElSRUNUSVZFKiBET0NVTUVOVC1TVEFSVCBibG9ja19ub2RlPyBET0NVTUVOVC1FTkQqCisjIGJsb2NrX25vZGVfb3JfaW5kZW50bGVzc19zZXF1ZW5jZSA6Oj0KKyMgICAgICAgICAgICAgICAgICAgICAgIEFMSUFTCisjICAgICAgICAgICAgICAgICAgICAgICB8IHByb3BlcnRpZXMgKGJsb2NrX2NvbnRlbnQgfCBpbmRlbnRsZXNzX2Jsb2NrX3NlcXVlbmNlKT8KKyMgICAgICAgICAgICAgICAgICAgICAgIHwgYmxvY2tfY29udGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRlbnRsZXNzX2Jsb2NrX3NlcXVlbmNlCisjIGJsb2NrX25vZGUgICAgICAgIDo6PSBBTElBUworIyAgICAgICAgICAgICAgICAgICAgICAgfCBwcm9wZXJ0aWVzIGJsb2NrX2NvbnRlbnQ/CisjICAgICAgICAgICAgICAgICAgICAgICB8IGJsb2NrX2NvbnRlbnQKKyMgZmxvd19ub2RlICAgICAgICAgOjo9IEFMSUFTCisjICAgICAgICAgICAgICAgICAgICAgICB8IHByb3BlcnRpZXMgZmxvd19jb250ZW50PworIyAgICAgICAgICAgICAgICAgICAgICAgfCBmbG93X2NvbnRlbnQKKyMgcHJvcGVydGllcyAgICAgICAgOjo9IFRBRyBBTkNIT1I/IHwgQU5DSE9SIFRBRz8KKyMgYmxvY2tfY29udGVudCAgICAgOjo9IGJsb2NrX2NvbGxlY3Rpb24gfCBmbG93X2NvbGxlY3Rpb24gfCBTQ0FMQVIKKyMgZmxvd19jb250ZW50ICAgICAgOjo9IGZsb3dfY29sbGVjdGlvbiB8IFNDQUxBUgorIyBibG9ja19jb2xsZWN0aW9uICA6Oj0gYmxvY2tfc2VxdWVuY2UgfCBibG9ja19tYXBwaW5nCisjIGZsb3dfY29sbGVjdGlvbiAgIDo6PSBmbG93X3NlcXVlbmNlIHwgZmxvd19tYXBwaW5nCisjIGJsb2NrX3NlcXVlbmNlICAgIDo6PSBCTE9DSy1TRVFVRU5DRS1TVEFSVCAoQkxPQ0stRU5UUlkgYmxvY2tfbm9kZT8pKiBCTE9DSy1FTkQKKyMgaW5kZW50bGVzc19zZXF1ZW5jZSAgIDo6PSAoQkxPQ0stRU5UUlkgYmxvY2tfbm9kZT8pKworIyBibG9ja19tYXBwaW5nICAgICA6Oj0gQkxPQ0stTUFQUElOR19TVEFSVAorIyAgICAgICAgICAgICAgICAgICAgICAgKChLRVkgYmxvY2tfbm9kZV9vcl9pbmRlbnRsZXNzX3NlcXVlbmNlPyk/CisjICAgICAgICAgICAgICAgICAgICAgICAoVkFMVUUgYmxvY2tfbm9kZV9vcl9pbmRlbnRsZXNzX3NlcXVlbmNlPyk/KSoKKyMgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLLUVORAorIyBmbG93X3NlcXVlbmNlICAgICA6Oj0gRkxPVy1TRVFVRU5DRS1TVEFSVAorIyAgICAgICAgICAgICAgICAgICAgICAgKGZsb3dfc2VxdWVuY2VfZW50cnkgRkxPVy1FTlRSWSkqCisjICAgICAgICAgICAgICAgICAgICAgICBmbG93X3NlcXVlbmNlX2VudHJ5PworIyAgICAgICAgICAgICAgICAgICAgICAgRkxPVy1TRVFVRU5DRS1FTkQKKyMgZmxvd19zZXF1ZW5jZV9lbnRyeSAgIDo6PSBmbG93X25vZGUgfCBLRVkgZmxvd19ub2RlPyAoVkFMVUUgZmxvd19ub2RlPyk/CisjIGZsb3dfbWFwcGluZyAgICAgIDo6PSBGTE9XLU1BUFBJTkctU1RBUlQKKyMgICAgICAgICAgICAgICAgICAgICAgIChmbG93X21hcHBpbmdfZW50cnkgRkxPVy1FTlRSWSkqCisjICAgICAgICAgICAgICAgICAgICAgICBmbG93X21hcHBpbmdfZW50cnk/CisjICAgICAgICAgICAgICAgICAgICAgICBGTE9XLU1BUFBJTkctRU5ECisjIGZsb3dfbWFwcGluZ19lbnRyeSAgICA6Oj0gZmxvd19ub2RlIHwgS0VZIGZsb3dfbm9kZT8gKFZBTFVFIGZsb3dfbm9kZT8pPworIworIyBGSVJTVCBzZXRzOgorIworIyBzdHJlYW06IHsgU1RSRUFNLVNUQVJUIH0KKyMgZXhwbGljaXRfZG9jdW1lbnQ6IHsgRElSRUNUSVZFIERPQ1VNRU5ULVNUQVJUIH0KKyMgaW1wbGljaXRfZG9jdW1lbnQ6IEZJUlNUKGJsb2NrX25vZGUpCisjIGJsb2NrX25vZGU6IHsgQUxJQVMgVEFHIEFOQ0hPUiBTQ0FMQVIgQkxPQ0stU0VRVUVOQ0UtU1RBUlQgQkxPQ0stTUFQUElORy1TVEFSVCBGTE9XLVNFUVVFTkNFLVNUQVJUIEZMT1ctTUFQUElORy1TVEFSVCB9CisjIGZsb3dfbm9kZTogeyBBTElBUyBBTkNIT1IgVEFHIFNDQUxBUiBGTE9XLVNFUVVFTkNFLVNUQVJUIEZMT1ctTUFQUElORy1TVEFSVCB9CisjIGJsb2NrX2NvbnRlbnQ6IHsgQkxPQ0stU0VRVUVOQ0UtU1RBUlQgQkxPQ0stTUFQUElORy1TVEFSVCBGTE9XLVNFUVVFTkNFLVNUQVJUIEZMT1ctTUFQUElORy1TVEFSVCBTQ0FMQVIgfQorIyBmbG93X2NvbnRlbnQ6IHsgRkxPVy1TRVFVRU5DRS1TVEFSVCBGTE9XLU1BUFBJTkctU1RBUlQgU0NBTEFSIH0KKyMgYmxvY2tfY29sbGVjdGlvbjogeyBCTE9DSy1TRVFVRU5DRS1TVEFSVCBCTE9DSy1NQVBQSU5HLVNUQVJUIH0KKyMgZmxvd19jb2xsZWN0aW9uOiB7IEZMT1ctU0VRVUVOQ0UtU1RBUlQgRkxPVy1NQVBQSU5HLVNUQVJUIH0KKyMgYmxvY2tfc2VxdWVuY2U6IHsgQkxPQ0stU0VRVUVOQ0UtU1RBUlQgfQorIyBibG9ja19tYXBwaW5nOiB7IEJMT0NLLU1BUFBJTkctU1RBUlQgfQorIyBibG9ja19ub2RlX29yX2luZGVudGxlc3Nfc2VxdWVuY2U6IHsgQUxJQVMgQU5DSE9SIFRBRyBTQ0FMQVIgQkxPQ0stU0VRVUVOQ0UtU1RBUlQgQkxPQ0stTUFQUElORy1TVEFSVCBGTE9XLVNFUVVFTkNFLVNUQVJUIEZMT1ctTUFQUElORy1TVEFSVCBCTE9DSy1FTlRSWSB9CisjIGluZGVudGxlc3Nfc2VxdWVuY2U6IHsgRU5UUlkgfQorIyBmbG93X2NvbGxlY3Rpb246IHsgRkxPVy1TRVFVRU5DRS1TVEFSVCBGTE9XLU1BUFBJTkctU1RBUlQgfQorIyBmbG93X3NlcXVlbmNlOiB7IEZMT1ctU0VRVUVOQ0UtU1RBUlQgfQorIyBmbG93X21hcHBpbmc6IHsgRkxPVy1NQVBQSU5HLVNUQVJUIH0KKyMgZmxvd19zZXF1ZW5jZV9lbnRyeTogeyBBTElBUyBBTkNIT1IgVEFHIFNDQUxBUiBGTE9XLVNFUVVFTkNFLVNUQVJUIEZMT1ctTUFQUElORy1TVEFSVCBLRVkgfQorIyBmbG93X21hcHBpbmdfZW50cnk6IHsgQUxJQVMgQU5DSE9SIFRBRyBTQ0FMQVIgRkxPVy1TRVFVRU5DRS1TVEFSVCBGTE9XLU1BUFBJTkctU1RBUlQgS0VZIH0KKworX19hbGxfXyA9IFsnUGFyc2VyJywgJ1BhcnNlckVycm9yJ10KKworZnJvbSAuZXJyb3IgaW1wb3J0IE1hcmtlZFlBTUxFcnJvcgorZnJvbSAudG9rZW5zIGltcG9ydCAqCitmcm9tIC5ldmVudHMgaW1wb3J0ICoKK2Zyb20gLnNjYW5uZXIgaW1wb3J0ICoKKworY2xhc3MgUGFyc2VyRXJyb3IoTWFya2VkWUFNTEVycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFBhcnNlcjoKKyAgICAjIFNpbmNlIHdyaXRpbmcgYSByZWN1cnNpdmUtZGVzY2VuZGFudCBwYXJzZXIgaXMgYSBzdHJhaWdodGZvcndhcmQgdGFzaywgd2UKKyAgICAjIGRvIG5vdCBnaXZlIG1hbnkgY29tbWVudHMgaGVyZS4KKworICAgIERFRkFVTFRfVEFHUyA9IHsKKyAgICAgICAgJyEnOiAgICchJywKKyAgICAgICAgJyEhJzogICd0YWc6eWFtbC5vcmcsMjAwMjonLAorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jdXJyZW50X2V2ZW50ID0gTm9uZQorICAgICAgICBzZWxmLnlhbWxfdmVyc2lvbiA9IE5vbmUKKyAgICAgICAgc2VsZi50YWdfaGFuZGxlcyA9IHt9CisgICAgICAgIHNlbGYuc3RhdGVzID0gW10KKyAgICAgICAgc2VsZi5tYXJrcyA9IFtdCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnBhcnNlX3N0cmVhbV9zdGFydAorCisgICAgZGVmIGRpc3Bvc2Uoc2VsZik6CisgICAgICAgICMgUmVzZXQgdGhlIHN0YXRlIGF0dHJpYnV0ZXMgKHRvIGNsZWFyIHNlbGYtcmVmZXJlbmNlcykKKyAgICAgICAgc2VsZi5zdGF0ZXMgPSBbXQorICAgICAgICBzZWxmLnN0YXRlID0gTm9uZQorCisgICAgZGVmIGNoZWNrX2V2ZW50KHNlbGYsICpjaG9pY2VzKToKKyAgICAgICAgIyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgbmV4dCBldmVudC4KKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2V2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLnN0YXRlOgorICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9ldmVudCA9IHNlbGYuc3RhdGUoKQorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZXZlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgY2hvaWNlczoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZm9yIGNob2ljZSBpbiBjaG9pY2VzOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jdXJyZW50X2V2ZW50LCBjaG9pY2UpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBwZWVrX2V2ZW50KHNlbGYpOgorICAgICAgICAjIEdldCB0aGUgbmV4dCBldmVudC4KKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2V2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLnN0YXRlOgorICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9ldmVudCA9IHNlbGYuc3RhdGUoKQorICAgICAgICByZXR1cm4gc2VsZi5jdXJyZW50X2V2ZW50CisKKyAgICBkZWYgZ2V0X2V2ZW50KHNlbGYpOgorICAgICAgICAjIEdldCB0aGUgbmV4dCBldmVudCBhbmQgcHJvY2VlZCBmdXJ0aGVyLgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZXZlbnQgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdGU6CisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2V2ZW50ID0gc2VsZi5zdGF0ZSgpCisgICAgICAgIHZhbHVlID0gc2VsZi5jdXJyZW50X2V2ZW50CisgICAgICAgIHNlbGYuY3VycmVudF9ldmVudCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAjIHN0cmVhbSAgICA6Oj0gU1RSRUFNLVNUQVJUIGltcGxpY2l0X2RvY3VtZW50PyBleHBsaWNpdF9kb2N1bWVudCogU1RSRUFNLUVORAorICAgICMgaW1wbGljaXRfZG9jdW1lbnQgOjo9IGJsb2NrX25vZGUgRE9DVU1FTlQtRU5EKgorICAgICMgZXhwbGljaXRfZG9jdW1lbnQgOjo9IERJUkVDVElWRSogRE9DVU1FTlQtU1RBUlQgYmxvY2tfbm9kZT8gRE9DVU1FTlQtRU5EKgorCisgICAgZGVmIHBhcnNlX3N0cmVhbV9zdGFydChzZWxmKToKKworICAgICAgICAjIFBhcnNlIHRoZSBzdHJlYW0gc3RhcnQuCisgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICBldmVudCA9IFN0cmVhbVN0YXJ0RXZlbnQodG9rZW4uc3RhcnRfbWFyaywgdG9rZW4uZW5kX21hcmssCisgICAgICAgICAgICAgICAgZW5jb2Rpbmc9dG9rZW4uZW5jb2RpbmcpCisKKyAgICAgICAgIyBQcmVwYXJlIHRoZSBuZXh0IHN0YXRlLgorICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9pbXBsaWNpdF9kb2N1bWVudF9zdGFydAorCisgICAgICAgIHJldHVybiBldmVudAorCisgICAgZGVmIHBhcnNlX2ltcGxpY2l0X2RvY3VtZW50X3N0YXJ0KHNlbGYpOgorCisgICAgICAgICMgUGFyc2UgYW4gaW1wbGljaXQgZG9jdW1lbnQuCisgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKERpcmVjdGl2ZVRva2VuLCBEb2N1bWVudFN0YXJ0VG9rZW4sCisgICAgICAgICAgICAgICAgU3RyZWFtRW5kVG9rZW4pOgorICAgICAgICAgICAgc2VsZi50YWdfaGFuZGxlcyA9IHNlbGYuREVGQVVMVF9UQUdTCisgICAgICAgICAgICB0b2tlbiA9IHNlbGYucGVla190b2tlbigpCisgICAgICAgICAgICBzdGFydF9tYXJrID0gZW5kX21hcmsgPSB0b2tlbi5zdGFydF9tYXJrCisgICAgICAgICAgICBldmVudCA9IERvY3VtZW50U3RhcnRFdmVudChzdGFydF9tYXJrLCBlbmRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgZXhwbGljaXQ9RmFsc2UpCisKKyAgICAgICAgICAgICMgUHJlcGFyZSB0aGUgbmV4dCBzdGF0ZS4KKyAgICAgICAgICAgIHNlbGYuc3RhdGVzLmFwcGVuZChzZWxmLnBhcnNlX2RvY3VtZW50X2VuZCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnBhcnNlX2Jsb2NrX25vZGUKKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50CisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX2RvY3VtZW50X3N0YXJ0KCkKKworICAgIGRlZiBwYXJzZV9kb2N1bWVudF9zdGFydChzZWxmKToKKworICAgICAgICAjIFBhcnNlIGFueSBleHRyYSBkb2N1bWVudCBlbmQgaW5kaWNhdG9ycy4KKyAgICAgICAgd2hpbGUgc2VsZi5jaGVja190b2tlbihEb2N1bWVudEVuZFRva2VuKToKKyAgICAgICAgICAgIHNlbGYuZ2V0X3Rva2VuKCkKKworICAgICAgICAjIFBhcnNlIGFuIGV4cGxpY2l0IGRvY3VtZW50LgorICAgICAgICBpZiBub3Qgc2VsZi5jaGVja190b2tlbihTdHJlYW1FbmRUb2tlbik6CisgICAgICAgICAgICB0b2tlbiA9IHNlbGYucGVla190b2tlbigpCisgICAgICAgICAgICBzdGFydF9tYXJrID0gdG9rZW4uc3RhcnRfbWFyaworICAgICAgICAgICAgdmVyc2lvbiwgdGFncyA9IHNlbGYucHJvY2Vzc19kaXJlY3RpdmVzKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKERvY3VtZW50U3RhcnRUb2tlbik6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VyRXJyb3IoTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAnPGRvY3VtZW50IHN0YXJ0PicsIGJ1dCBmb3VuZCAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5wZWVrX3Rva2VuKCkuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlZWtfdG9rZW4oKS5zdGFydF9tYXJrKQorICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgICAgICBlbmRfbWFyayA9IHRva2VuLmVuZF9tYXJrCisgICAgICAgICAgICBldmVudCA9IERvY3VtZW50U3RhcnRFdmVudChzdGFydF9tYXJrLCBlbmRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgZXhwbGljaXQ9VHJ1ZSwgdmVyc2lvbj12ZXJzaW9uLCB0YWdzPXRhZ3MpCisgICAgICAgICAgICBzZWxmLnN0YXRlcy5hcHBlbmQoc2VsZi5wYXJzZV9kb2N1bWVudF9lbmQpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9kb2N1bWVudF9jb250ZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFBhcnNlIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KKyAgICAgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICAgICAgZXZlbnQgPSBTdHJlYW1FbmRFdmVudCh0b2tlbi5zdGFydF9tYXJrLCB0b2tlbi5lbmRfbWFyaykKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5zdGF0ZXMKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5tYXJrcworICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIGV2ZW50CisKKyAgICBkZWYgcGFyc2VfZG9jdW1lbnRfZW5kKHNlbGYpOgorCisgICAgICAgICMgUGFyc2UgdGhlIGRvY3VtZW50IGVuZC4KKyAgICAgICAgdG9rZW4gPSBzZWxmLnBlZWtfdG9rZW4oKQorICAgICAgICBzdGFydF9tYXJrID0gZW5kX21hcmsgPSB0b2tlbi5zdGFydF9tYXJrCisgICAgICAgIGV4cGxpY2l0ID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5jaGVja190b2tlbihEb2N1bWVudEVuZFRva2VuKToKKyAgICAgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICAgICAgZW5kX21hcmsgPSB0b2tlbi5lbmRfbWFyaworICAgICAgICAgICAgZXhwbGljaXQgPSBUcnVlCisgICAgICAgIGV2ZW50ID0gRG9jdW1lbnRFbmRFdmVudChzdGFydF9tYXJrLCBlbmRfbWFyaywKKyAgICAgICAgICAgICAgICBleHBsaWNpdD1leHBsaWNpdCkKKworICAgICAgICAjIFByZXBhcmUgdGhlIG5leHQgc3RhdGUuCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnBhcnNlX2RvY3VtZW50X3N0YXJ0CisKKyAgICAgICAgcmV0dXJuIGV2ZW50CisKKyAgICBkZWYgcGFyc2VfZG9jdW1lbnRfY29udGVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jaGVja190b2tlbihEaXJlY3RpdmVUb2tlbiwKKyAgICAgICAgICAgICAgICBEb2N1bWVudFN0YXJ0VG9rZW4sIERvY3VtZW50RW5kVG9rZW4sIFN0cmVhbUVuZFRva2VuKToKKyAgICAgICAgICAgIGV2ZW50ID0gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcihzZWxmLnBlZWtfdG9rZW4oKS5zdGFydF9tYXJrKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVzLnBvcCgpCisgICAgICAgICAgICByZXR1cm4gZXZlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX2Jsb2NrX25vZGUoKQorCisgICAgZGVmIHByb2Nlc3NfZGlyZWN0aXZlcyhzZWxmKToKKyAgICAgICAgc2VsZi55YW1sX3ZlcnNpb24gPSBOb25lCisgICAgICAgIHNlbGYudGFnX2hhbmRsZXMgPSB7fQorICAgICAgICB3aGlsZSBzZWxmLmNoZWNrX3Rva2VuKERpcmVjdGl2ZVRva2VuKToKKyAgICAgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICAgICAgaWYgdG9rZW4ubmFtZSA9PSAnWUFNTCc6CisgICAgICAgICAgICAgICAgaWYgc2VsZi55YW1sX3ZlcnNpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlckVycm9yKE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvdW5kIGR1cGxpY2F0ZSBZQU1MIGRpcmVjdGl2ZSIsIHRva2VuLnN0YXJ0X21hcmspCisgICAgICAgICAgICAgICAgbWFqb3IsIG1pbm9yID0gdG9rZW4udmFsdWUKKyAgICAgICAgICAgICAgICBpZiBtYWpvciAhPSAxOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZXJFcnJvcihOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3VuZCBpbmNvbXBhdGlibGUgWUFNTCBkb2N1bWVudCAodmVyc2lvbiAxLiogaXMgcmVxdWlyZWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5zdGFydF9tYXJrKQorICAgICAgICAgICAgICAgIHNlbGYueWFtbF92ZXJzaW9uID0gdG9rZW4udmFsdWUKKyAgICAgICAgICAgIGVsaWYgdG9rZW4ubmFtZSA9PSAnVEFHJzoKKyAgICAgICAgICAgICAgICBoYW5kbGUsIHByZWZpeCA9IHRva2VuLnZhbHVlCisgICAgICAgICAgICAgICAgaWYgaGFuZGxlIGluIHNlbGYudGFnX2hhbmRsZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlckVycm9yKE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1cGxpY2F0ZSB0YWcgaGFuZGxlICVyIiAlIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5zdGFydF9tYXJrKQorICAgICAgICAgICAgICAgIHNlbGYudGFnX2hhbmRsZXNbaGFuZGxlXSA9IHByZWZpeAorICAgICAgICBpZiBzZWxmLnRhZ19oYW5kbGVzOgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmLnlhbWxfdmVyc2lvbiwgc2VsZi50YWdfaGFuZGxlcy5jb3B5KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi55YW1sX3ZlcnNpb24sIE5vbmUKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLkRFRkFVTFRfVEFHUzoKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi50YWdfaGFuZGxlczoKKyAgICAgICAgICAgICAgICBzZWxmLnRhZ19oYW5kbGVzW2tleV0gPSBzZWxmLkRFRkFVTFRfVEFHU1trZXldCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgIyBibG9ja19ub2RlX29yX2luZGVudGxlc3Nfc2VxdWVuY2UgOjo9IEFMSUFTCisgICAgIyAgICAgICAgICAgICAgIHwgcHJvcGVydGllcyAoYmxvY2tfY29udGVudCB8IGluZGVudGxlc3NfYmxvY2tfc2VxdWVuY2UpPworICAgICMgICAgICAgICAgICAgICB8IGJsb2NrX2NvbnRlbnQKKyAgICAjICAgICAgICAgICAgICAgfCBpbmRlbnRsZXNzX2Jsb2NrX3NlcXVlbmNlCisgICAgIyBibG9ja19ub2RlICAgIDo6PSBBTElBUworICAgICMgICAgICAgICAgICAgICAgICAgfCBwcm9wZXJ0aWVzIGJsb2NrX2NvbnRlbnQ/CisgICAgIyAgICAgICAgICAgICAgICAgICB8IGJsb2NrX2NvbnRlbnQKKyAgICAjIGZsb3dfbm9kZSAgICAgOjo9IEFMSUFTCisgICAgIyAgICAgICAgICAgICAgICAgICB8IHByb3BlcnRpZXMgZmxvd19jb250ZW50PworICAgICMgICAgICAgICAgICAgICAgICAgfCBmbG93X2NvbnRlbnQKKyAgICAjIHByb3BlcnRpZXMgICAgOjo9IFRBRyBBTkNIT1I/IHwgQU5DSE9SIFRBRz8KKyAgICAjIGJsb2NrX2NvbnRlbnQgICAgIDo6PSBibG9ja19jb2xsZWN0aW9uIHwgZmxvd19jb2xsZWN0aW9uIHwgU0NBTEFSCisgICAgIyBmbG93X2NvbnRlbnQgICAgICA6Oj0gZmxvd19jb2xsZWN0aW9uIHwgU0NBTEFSCisgICAgIyBibG9ja19jb2xsZWN0aW9uICA6Oj0gYmxvY2tfc2VxdWVuY2UgfCBibG9ja19tYXBwaW5nCisgICAgIyBmbG93X2NvbGxlY3Rpb24gICA6Oj0gZmxvd19zZXF1ZW5jZSB8IGZsb3dfbWFwcGluZworCisgICAgZGVmIHBhcnNlX2Jsb2NrX25vZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX25vZGUoYmxvY2s9VHJ1ZSkKKworICAgIGRlZiBwYXJzZV9mbG93X25vZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX25vZGUoKQorCisgICAgZGVmIHBhcnNlX2Jsb2NrX25vZGVfb3JfaW5kZW50bGVzc19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyc2Vfbm9kZShibG9jaz1UcnVlLCBpbmRlbnRsZXNzX3NlcXVlbmNlPVRydWUpCisKKyAgICBkZWYgcGFyc2Vfbm9kZShzZWxmLCBibG9jaz1GYWxzZSwgaW5kZW50bGVzc19zZXF1ZW5jZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuY2hlY2tfdG9rZW4oQWxpYXNUb2tlbik6CisgICAgICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0X3Rva2VuKCkKKyAgICAgICAgICAgIGV2ZW50ID0gQWxpYXNFdmVudCh0b2tlbi52YWx1ZSwgdG9rZW4uc3RhcnRfbWFyaywgdG9rZW4uZW5kX21hcmspCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5zdGF0ZXMucG9wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFuY2hvciA9IE5vbmUKKyAgICAgICAgICAgIHRhZyA9IE5vbmUKKyAgICAgICAgICAgIHN0YXJ0X21hcmsgPSBlbmRfbWFyayA9IHRhZ19tYXJrID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5jaGVja190b2tlbihBbmNob3JUb2tlbik6CisgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgICAgICAgICAgc3RhcnRfbWFyayA9IHRva2VuLnN0YXJ0X21hcmsKKyAgICAgICAgICAgICAgICBlbmRfbWFyayA9IHRva2VuLmVuZF9tYXJrCisgICAgICAgICAgICAgICAgYW5jaG9yID0gdG9rZW4udmFsdWUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKFRhZ1Rva2VuKToKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgICAgICAgICAgICAgIHRhZ19tYXJrID0gdG9rZW4uc3RhcnRfbWFyaworICAgICAgICAgICAgICAgICAgICBlbmRfbWFyayA9IHRva2VuLmVuZF9tYXJrCisgICAgICAgICAgICAgICAgICAgIHRhZyA9IHRva2VuLnZhbHVlCisgICAgICAgICAgICBlbGlmIHNlbGYuY2hlY2tfdG9rZW4oVGFnVG9rZW4pOgorICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICAgICAgICAgIHN0YXJ0X21hcmsgPSB0YWdfbWFyayA9IHRva2VuLnN0YXJ0X21hcmsKKyAgICAgICAgICAgICAgICBlbmRfbWFyayA9IHRva2VuLmVuZF9tYXJrCisgICAgICAgICAgICAgICAgdGFnID0gdG9rZW4udmFsdWUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKEFuY2hvclRva2VuKToKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgICAgICAgICAgICAgIGVuZF9tYXJrID0gdG9rZW4uZW5kX21hcmsKKyAgICAgICAgICAgICAgICAgICAgYW5jaG9yID0gdG9rZW4udmFsdWUKKyAgICAgICAgICAgIGlmIHRhZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBoYW5kbGUsIHN1ZmZpeCA9IHRhZworICAgICAgICAgICAgICAgIGlmIGhhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFuZGxlIG5vdCBpbiBzZWxmLnRhZ19oYW5kbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VyRXJyb3IoIndoaWxlIHBhcnNpbmcgYSBub2RlIiwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvdW5kIHVuZGVmaW5lZCB0YWcgaGFuZGxlICVyIiAlIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnX21hcmspCisgICAgICAgICAgICAgICAgICAgIHRhZyA9IHNlbGYudGFnX2hhbmRsZXNbaGFuZGxlXStzdWZmaXgKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YWcgPSBzdWZmaXgKKyAgICAgICAgICAgICNpZiB0YWcgPT0gJyEnOgorICAgICAgICAgICAgIyAgICByYWlzZSBQYXJzZXJFcnJvcigid2hpbGUgcGFyc2luZyBhIG5vZGUiLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgIyAgICAgICAgICAgICJmb3VuZCBub24tc3BlY2lmaWMgdGFnICchJyIsIHRhZ19tYXJrLAorICAgICAgICAgICAgIyAgICAgICAgICAgICJQbGVhc2UgY2hlY2sgJ2h0dHA6Ly9weXlhbWwub3JnL3dpa2kvWUFNTE5vblNwZWNpZmljVGFnJyBhbmQgc2hhcmUgeW91ciBvcGluaW9uLiIpCisgICAgICAgICAgICBpZiBzdGFydF9tYXJrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3RhcnRfbWFyayA9IGVuZF9tYXJrID0gc2VsZi5wZWVrX3Rva2VuKCkuc3RhcnRfbWFyaworICAgICAgICAgICAgZXZlbnQgPSBOb25lCisgICAgICAgICAgICBpbXBsaWNpdCA9ICh0YWcgaXMgTm9uZSBvciB0YWcgPT0gJyEnKQorICAgICAgICAgICAgaWYgaW5kZW50bGVzc19zZXF1ZW5jZSBhbmQgc2VsZi5jaGVja190b2tlbihCbG9ja0VudHJ5VG9rZW4pOgorICAgICAgICAgICAgICAgIGVuZF9tYXJrID0gc2VsZi5wZWVrX3Rva2VuKCkuZW5kX21hcmsKKyAgICAgICAgICAgICAgICBldmVudCA9IFNlcXVlbmNlU3RhcnRFdmVudChhbmNob3IsIHRhZywgaW1wbGljaXQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9tYXJrLCBlbmRfbWFyaykKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9pbmRlbnRsZXNzX3NlcXVlbmNlX2VudHJ5CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfdG9rZW4oU2NhbGFyVG9rZW4pOgorICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0X3Rva2VuKCkKKyAgICAgICAgICAgICAgICAgICAgZW5kX21hcmsgPSB0b2tlbi5lbmRfbWFyaworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4ucGxhaW4gYW5kIHRhZyBpcyBOb25lKSBvciB0YWcgPT0gJyEnOgorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQgPSAoVHJ1ZSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgdGFnIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdCA9IChGYWxzZSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0ID0gKEZhbHNlLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBTY2FsYXJFdmVudChhbmNob3IsIHRhZywgaW1wbGljaXQsIHRva2VuLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X21hcmssIGVuZF9tYXJrLCBzdHlsZT10b2tlbi5zdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVzLnBvcCgpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmNoZWNrX3Rva2VuKEZsb3dTZXF1ZW5jZVN0YXJ0VG9rZW4pOgorICAgICAgICAgICAgICAgICAgICBlbmRfbWFyayA9IHNlbGYucGVla190b2tlbigpLmVuZF9tYXJrCisgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0gU2VxdWVuY2VTdGFydEV2ZW50KGFuY2hvciwgdGFnLCBpbXBsaWNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9tYXJrLCBlbmRfbWFyaywgZmxvd19zdHlsZT1UcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9mbG93X3NlcXVlbmNlX2ZpcnN0X2VudHJ5CisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmNoZWNrX3Rva2VuKEZsb3dNYXBwaW5nU3RhcnRUb2tlbik6CisgICAgICAgICAgICAgICAgICAgIGVuZF9tYXJrID0gc2VsZi5wZWVrX3Rva2VuKCkuZW5kX21hcmsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBNYXBwaW5nU3RhcnRFdmVudChhbmNob3IsIHRhZywgaW1wbGljaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfbWFyaywgZW5kX21hcmssIGZsb3dfc3R5bGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYucGFyc2VfZmxvd19tYXBwaW5nX2ZpcnN0X2tleQorICAgICAgICAgICAgICAgIGVsaWYgYmxvY2sgYW5kIHNlbGYuY2hlY2tfdG9rZW4oQmxvY2tTZXF1ZW5jZVN0YXJ0VG9rZW4pOgorICAgICAgICAgICAgICAgICAgICBlbmRfbWFyayA9IHNlbGYucGVla190b2tlbigpLnN0YXJ0X21hcmsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBTZXF1ZW5jZVN0YXJ0RXZlbnQoYW5jaG9yLCB0YWcsIGltcGxpY2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X21hcmssIGVuZF9tYXJrLCBmbG93X3N0eWxlPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9ibG9ja19zZXF1ZW5jZV9maXJzdF9lbnRyeQorICAgICAgICAgICAgICAgIGVsaWYgYmxvY2sgYW5kIHNlbGYuY2hlY2tfdG9rZW4oQmxvY2tNYXBwaW5nU3RhcnRUb2tlbik6CisgICAgICAgICAgICAgICAgICAgIGVuZF9tYXJrID0gc2VsZi5wZWVrX3Rva2VuKCkuc3RhcnRfbWFyaworICAgICAgICAgICAgICAgICAgICBldmVudCA9IE1hcHBpbmdTdGFydEV2ZW50KGFuY2hvciwgdGFnLCBpbXBsaWNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9tYXJrLCBlbmRfbWFyaywgZmxvd19zdHlsZT1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYucGFyc2VfYmxvY2tfbWFwcGluZ19maXJzdF9rZXkKKyAgICAgICAgICAgICAgICBlbGlmIGFuY2hvciBpcyBub3QgTm9uZSBvciB0YWcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgRW1wdHkgc2NhbGFycyBhcmUgYWxsb3dlZCBldmVuIGlmIGEgdGFnIG9yIGFuIGFuY2hvciBpcworICAgICAgICAgICAgICAgICAgICAjIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBTY2FsYXJFdmVudChhbmNob3IsIHRhZywgKGltcGxpY2l0LCBGYWxzZSksICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5zdGF0ZXMucG9wKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBibG9jazoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSAnYmxvY2snCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gJ2Zsb3cnCisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5wZWVrX3Rva2VuKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VyRXJyb3IoIndoaWxlIHBhcnNpbmcgYSAlcyBub2RlIiAlIG5vZGUsIHN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHRoZSBub2RlIGNvbnRlbnQsIGJ1dCBmb3VuZCAlciIgJSB0b2tlbi5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5zdGFydF9tYXJrKQorICAgICAgICByZXR1cm4gZXZlbnQKKworICAgICMgYmxvY2tfc2VxdWVuY2UgOjo9IEJMT0NLLVNFUVVFTkNFLVNUQVJUIChCTE9DSy1FTlRSWSBibG9ja19ub2RlPykqIEJMT0NLLUVORAorCisgICAgZGVmIHBhcnNlX2Jsb2NrX3NlcXVlbmNlX2ZpcnN0X2VudHJ5KHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0X3Rva2VuKCkKKyAgICAgICAgc2VsZi5tYXJrcy5hcHBlbmQodG9rZW4uc3RhcnRfbWFyaykKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfYmxvY2tfc2VxdWVuY2VfZW50cnkoKQorCisgICAgZGVmIHBhcnNlX2Jsb2NrX3NlcXVlbmNlX2VudHJ5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKEJsb2NrRW50cnlUb2tlbik6CisgICAgICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0X3Rva2VuKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKEJsb2NrRW50cnlUb2tlbiwgQmxvY2tFbmRUb2tlbik6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYucGFyc2VfYmxvY2tfc2VxdWVuY2VfZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfYmxvY2tfbm9kZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnBhcnNlX2Jsb2NrX3NlcXVlbmNlX2VudHJ5CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19lbXB0eV9zY2FsYXIodG9rZW4uZW5kX21hcmspCisgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKEJsb2NrRW5kVG9rZW4pOgorICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnBlZWtfdG9rZW4oKQorICAgICAgICAgICAgcmFpc2UgUGFyc2VyRXJyb3IoIndoaWxlIHBhcnNpbmcgYSBibG9jayBjb2xsZWN0aW9uIiwgc2VsZi5tYXJrc1stMV0sCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCA8YmxvY2sgZW5kPiwgYnV0IGZvdW5kICVyIiAlIHRva2VuLmlkLCB0b2tlbi5zdGFydF9tYXJrKQorICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0X3Rva2VuKCkKKyAgICAgICAgZXZlbnQgPSBTZXF1ZW5jZUVuZEV2ZW50KHRva2VuLnN0YXJ0X21hcmssIHRva2VuLmVuZF9tYXJrKQorICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5zdGF0ZXMucG9wKCkKKyAgICAgICAgc2VsZi5tYXJrcy5wb3AoKQorICAgICAgICByZXR1cm4gZXZlbnQKKworICAgICMgaW5kZW50bGVzc19zZXF1ZW5jZSA6Oj0gKEJMT0NLLUVOVFJZIGJsb2NrX25vZGU/KSsKKworICAgIGRlZiBwYXJzZV9pbmRlbnRsZXNzX3NlcXVlbmNlX2VudHJ5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKEJsb2NrRW50cnlUb2tlbik6CisgICAgICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0X3Rva2VuKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKEJsb2NrRW50cnlUb2tlbiwKKyAgICAgICAgICAgICAgICAgICAgS2V5VG9rZW4sIFZhbHVlVG9rZW4sIEJsb2NrRW5kVG9rZW4pOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVzLmFwcGVuZChzZWxmLnBhcnNlX2luZGVudGxlc3Nfc2VxdWVuY2VfZW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfYmxvY2tfbm9kZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnBhcnNlX2luZGVudGxlc3Nfc2VxdWVuY2VfZW50cnkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcih0b2tlbi5lbmRfbWFyaykKKyAgICAgICAgdG9rZW4gPSBzZWxmLnBlZWtfdG9rZW4oKQorICAgICAgICBldmVudCA9IFNlcXVlbmNlRW5kRXZlbnQodG9rZW4uc3RhcnRfbWFyaywgdG9rZW4uc3RhcnRfbWFyaykKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVzLnBvcCgpCisgICAgICAgIHJldHVybiBldmVudAorCisgICAgIyBibG9ja19tYXBwaW5nICAgICA6Oj0gQkxPQ0stTUFQUElOR19TVEFSVAorICAgICMgICAgICAgICAgICAgICAgICAgICAgICgoS0VZIGJsb2NrX25vZGVfb3JfaW5kZW50bGVzc19zZXF1ZW5jZT8pPworICAgICMgICAgICAgICAgICAgICAgICAgICAgIChWQUxVRSBibG9ja19ub2RlX29yX2luZGVudGxlc3Nfc2VxdWVuY2U/KT8pKgorICAgICMgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLLUVORAorCisgICAgZGVmIHBhcnNlX2Jsb2NrX21hcHBpbmdfZmlyc3Rfa2V5KHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0X3Rva2VuKCkKKyAgICAgICAgc2VsZi5tYXJrcy5hcHBlbmQodG9rZW4uc3RhcnRfbWFyaykKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfYmxvY2tfbWFwcGluZ19rZXkoKQorCisgICAgZGVmIHBhcnNlX2Jsb2NrX21hcHBpbmdfa2V5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKEtleVRva2VuKToKKyAgICAgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tfdG9rZW4oS2V5VG9rZW4sIFZhbHVlVG9rZW4sIEJsb2NrRW5kVG9rZW4pOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVzLmFwcGVuZChzZWxmLnBhcnNlX2Jsb2NrX21hcHBpbmdfdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfYmxvY2tfbm9kZV9vcl9pbmRlbnRsZXNzX3NlcXVlbmNlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYucGFyc2VfYmxvY2tfbWFwcGluZ192YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3NfZW1wdHlfc2NhbGFyKHRva2VuLmVuZF9tYXJrKQorICAgICAgICBpZiBub3Qgc2VsZi5jaGVja190b2tlbihCbG9ja0VuZFRva2VuKToKKyAgICAgICAgICAgIHRva2VuID0gc2VsZi5wZWVrX3Rva2VuKCkKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlckVycm9yKCJ3aGlsZSBwYXJzaW5nIGEgYmxvY2sgbWFwcGluZyIsIHNlbGYubWFya3NbLTFdLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgPGJsb2NrIGVuZD4sIGJ1dCBmb3VuZCAlciIgJSB0b2tlbi5pZCwgdG9rZW4uc3RhcnRfbWFyaykKKyAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgIGV2ZW50ID0gTWFwcGluZ0VuZEV2ZW50KHRva2VuLnN0YXJ0X21hcmssIHRva2VuLmVuZF9tYXJrKQorICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5zdGF0ZXMucG9wKCkKKyAgICAgICAgc2VsZi5tYXJrcy5wb3AoKQorICAgICAgICByZXR1cm4gZXZlbnQKKworICAgIGRlZiBwYXJzZV9ibG9ja19tYXBwaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKFZhbHVlVG9rZW4pOgorICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jaGVja190b2tlbihLZXlUb2tlbiwgVmFsdWVUb2tlbiwgQmxvY2tFbmRUb2tlbik6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYucGFyc2VfYmxvY2tfbWFwcGluZ19rZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfYmxvY2tfbm9kZV9vcl9pbmRlbnRsZXNzX3NlcXVlbmNlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYucGFyc2VfYmxvY2tfbWFwcGluZ19rZXkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcih0b2tlbi5lbmRfbWFyaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnBhcnNlX2Jsb2NrX21hcHBpbmdfa2V5CisgICAgICAgICAgICB0b2tlbiA9IHNlbGYucGVla190b2tlbigpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcih0b2tlbi5zdGFydF9tYXJrKQorCisgICAgIyBmbG93X3NlcXVlbmNlICAgICA6Oj0gRkxPVy1TRVFVRU5DRS1TVEFSVAorICAgICMgICAgICAgICAgICAgICAgICAgICAgIChmbG93X3NlcXVlbmNlX2VudHJ5IEZMT1ctRU5UUlkpKgorICAgICMgICAgICAgICAgICAgICAgICAgICAgIGZsb3dfc2VxdWVuY2VfZW50cnk/CisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgRkxPVy1TRVFVRU5DRS1FTkQKKyAgICAjIGZsb3dfc2VxdWVuY2VfZW50cnkgICA6Oj0gZmxvd19ub2RlIHwgS0VZIGZsb3dfbm9kZT8gKFZBTFVFIGZsb3dfbm9kZT8pPworICAgICMKKyAgICAjIE5vdGUgdGhhdCB3aGlsZSBwcm9kdWN0aW9uIHJ1bGVzIGZvciBib3RoIGZsb3dfc2VxdWVuY2VfZW50cnkgYW5kCisgICAgIyBmbG93X21hcHBpbmdfZW50cnkgYXJlIGVxdWFsLCB0aGVpciBpbnRlcnByZXRhdGlvbnMgYXJlIGRpZmZlcmVudC4KKyAgICAjIEZvciBgZmxvd19zZXF1ZW5jZV9lbnRyeWAsIHRoZSBwYXJ0IGBLRVkgZmxvd19ub2RlPyAoVkFMVUUgZmxvd19ub2RlPyk/YAorICAgICMgZ2VuZXJhdGUgYW4gaW5saW5lIG1hcHBpbmcgKHNldCBzeW50YXgpLgorCisgICAgZGVmIHBhcnNlX2Zsb3dfc2VxdWVuY2VfZmlyc3RfZW50cnkoc2VsZik6CisgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICBzZWxmLm1hcmtzLmFwcGVuZCh0b2tlbi5zdGFydF9tYXJrKQorICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5KGZpcnN0PVRydWUpCisKKyAgICBkZWYgcGFyc2VfZmxvd19zZXF1ZW5jZV9lbnRyeShzZWxmLCBmaXJzdD1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKEZsb3dTZXF1ZW5jZUVuZFRva2VuKToKKyAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKEZsb3dFbnRyeVRva2VuKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5wZWVrX3Rva2VuKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VyRXJyb3IoIndoaWxlIHBhcnNpbmcgYSBmbG93IHNlcXVlbmNlIiwgc2VsZi5tYXJrc1stMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICcsJyBvciAnXScsIGJ1dCBnb3QgJXIiICUgdG9rZW4uaWQsIHRva2VuLnN0YXJ0X21hcmspCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfdG9rZW4oS2V5VG9rZW4pOgorICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5wZWVrX3Rva2VuKCkKKyAgICAgICAgICAgICAgICBldmVudCA9IE1hcHBpbmdTdGFydEV2ZW50KE5vbmUsIE5vbmUsIFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5zdGFydF9tYXJrLCB0b2tlbi5lbmRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dfc3R5bGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5X21hcHBpbmdfa2V5CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50CisgICAgICAgICAgICBlbGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKEZsb3dTZXF1ZW5jZUVuZFRva2VuKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlcy5hcHBlbmQoc2VsZi5wYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX2Zsb3dfbm9kZSgpCisgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICBldmVudCA9IFNlcXVlbmNlRW5kRXZlbnQodG9rZW4uc3RhcnRfbWFyaywgdG9rZW4uZW5kX21hcmspCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnN0YXRlcy5wb3AoKQorICAgICAgICBzZWxmLm1hcmtzLnBvcCgpCisgICAgICAgIHJldHVybiBldmVudAorCisgICAgZGVmIHBhcnNlX2Zsb3dfc2VxdWVuY2VfZW50cnlfbWFwcGluZ19rZXkoc2VsZik6CisgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICBpZiBub3Qgc2VsZi5jaGVja190b2tlbihWYWx1ZVRva2VuLAorICAgICAgICAgICAgICAgIEZsb3dFbnRyeVRva2VuLCBGbG93U2VxdWVuY2VFbmRUb2tlbik6CisgICAgICAgICAgICBzZWxmLnN0YXRlcy5hcHBlbmQoc2VsZi5wYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5X21hcHBpbmdfdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV9mbG93X25vZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYucGFyc2VfZmxvd19zZXF1ZW5jZV9lbnRyeV9tYXBwaW5nX3ZhbHVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcih0b2tlbi5lbmRfbWFyaykKKworICAgIGRlZiBwYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5X21hcHBpbmdfdmFsdWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2hlY2tfdG9rZW4oVmFsdWVUb2tlbik6CisgICAgICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0X3Rva2VuKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKEZsb3dFbnRyeVRva2VuLCBGbG93U2VxdWVuY2VFbmRUb2tlbik6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYucGFyc2VfZmxvd19zZXF1ZW5jZV9lbnRyeV9tYXBwaW5nX2VuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV9mbG93X25vZGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5X21hcHBpbmdfZW5kCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19lbXB0eV9zY2FsYXIodG9rZW4uZW5kX21hcmspCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9mbG93X3NlcXVlbmNlX2VudHJ5X21hcHBpbmdfZW5kCisgICAgICAgICAgICB0b2tlbiA9IHNlbGYucGVla190b2tlbigpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcih0b2tlbi5zdGFydF9tYXJrKQorCisgICAgZGVmIHBhcnNlX2Zsb3dfc2VxdWVuY2VfZW50cnlfbWFwcGluZ19lbmQoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnBhcnNlX2Zsb3dfc2VxdWVuY2VfZW50cnkKKyAgICAgICAgdG9rZW4gPSBzZWxmLnBlZWtfdG9rZW4oKQorICAgICAgICByZXR1cm4gTWFwcGluZ0VuZEV2ZW50KHRva2VuLnN0YXJ0X21hcmssIHRva2VuLnN0YXJ0X21hcmspCisKKyAgICAjIGZsb3dfbWFwcGluZyAgOjo9IEZMT1ctTUFQUElORy1TVEFSVAorICAgICMgICAgICAgICAgICAgICAgICAgKGZsb3dfbWFwcGluZ19lbnRyeSBGTE9XLUVOVFJZKSoKKyAgICAjICAgICAgICAgICAgICAgICAgIGZsb3dfbWFwcGluZ19lbnRyeT8KKyAgICAjICAgICAgICAgICAgICAgICAgIEZMT1ctTUFQUElORy1FTkQKKyAgICAjIGZsb3dfbWFwcGluZ19lbnRyeSAgICA6Oj0gZmxvd19ub2RlIHwgS0VZIGZsb3dfbm9kZT8gKFZBTFVFIGZsb3dfbm9kZT8pPworCisgICAgZGVmIHBhcnNlX2Zsb3dfbWFwcGluZ19maXJzdF9rZXkoc2VsZik6CisgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICBzZWxmLm1hcmtzLmFwcGVuZCh0b2tlbi5zdGFydF9tYXJrKQorICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV9mbG93X21hcHBpbmdfa2V5KGZpcnN0PVRydWUpCisKKyAgICBkZWYgcGFyc2VfZmxvd19tYXBwaW5nX2tleShzZWxmLCBmaXJzdD1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKEZsb3dNYXBwaW5nRW5kVG9rZW4pOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfdG9rZW4oRmxvd0VudHJ5VG9rZW4pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF90b2tlbigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnBlZWtfdG9rZW4oKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZXJFcnJvcigid2hpbGUgcGFyc2luZyBhIGZsb3cgbWFwcGluZyIsIHNlbGYubWFya3NbLTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAnLCcgb3IgJ30nLCBidXQgZ290ICVyIiAlIHRva2VuLmlkLCB0b2tlbi5zdGFydF9tYXJrKQorICAgICAgICAgICAgaWYgc2VsZi5jaGVja190b2tlbihLZXlUb2tlbik6CisgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tfdG9rZW4oVmFsdWVUb2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZsb3dFbnRyeVRva2VuLCBGbG93TWFwcGluZ0VuZFRva2VuKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYucGFyc2VfZmxvd19tYXBwaW5nX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV9mbG93X25vZGUoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnBhcnNlX2Zsb3dfbWFwcGluZ192YWx1ZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcih0b2tlbi5lbmRfbWFyaykKKyAgICAgICAgICAgIGVsaWYgbm90IHNlbGYuY2hlY2tfdG9rZW4oRmxvd01hcHBpbmdFbmRUb2tlbik6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYucGFyc2VfZmxvd19tYXBwaW5nX2VtcHR5X3ZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX2Zsb3dfbm9kZSgpCisgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICBldmVudCA9IE1hcHBpbmdFbmRFdmVudCh0b2tlbi5zdGFydF9tYXJrLCB0b2tlbi5lbmRfbWFyaykKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVzLnBvcCgpCisgICAgICAgIHNlbGYubWFya3MucG9wKCkKKyAgICAgICAgcmV0dXJuIGV2ZW50CisKKyAgICBkZWYgcGFyc2VfZmxvd19tYXBwaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKFZhbHVlVG9rZW4pOgorICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jaGVja190b2tlbihGbG93RW50cnlUb2tlbiwgRmxvd01hcHBpbmdFbmRUb2tlbik6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZXMuYXBwZW5kKHNlbGYucGFyc2VfZmxvd19tYXBwaW5nX2tleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV9mbG93X25vZGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9mbG93X21hcHBpbmdfa2V5CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19lbXB0eV9zY2FsYXIodG9rZW4uZW5kX21hcmspCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5wYXJzZV9mbG93X21hcHBpbmdfa2V5CisgICAgICAgICAgICB0b2tlbiA9IHNlbGYucGVla190b2tlbigpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcih0b2tlbi5zdGFydF9tYXJrKQorCisgICAgZGVmIHBhcnNlX2Zsb3dfbWFwcGluZ19lbXB0eV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYucGFyc2VfZmxvd19tYXBwaW5nX2tleQorICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VtcHR5X3NjYWxhcihzZWxmLnBlZWtfdG9rZW4oKS5zdGFydF9tYXJrKQorCisgICAgZGVmIHByb2Nlc3NfZW1wdHlfc2NhbGFyKHNlbGYsIG1hcmspOgorICAgICAgICByZXR1cm4gU2NhbGFyRXZlbnQoTm9uZSwgTm9uZSwgKFRydWUsIEZhbHNlKSwgJycsIG1hcmssIG1hcmspCisKZGlmZiAtLWdpdCBhL2xpYi95YW1sL3JlYWRlci5weSBiL2xpYi95YW1sL3JlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzRiMDIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvcmVhZGVyLnB5CkBAIC0wLDAgKzEsMTg1IEBACisjIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGFic3RyYWN0aW9ucyBmb3IgdGhlIGlucHV0IHN0cmVhbS4gWW91IGRvbid0IGhhdmUgdG8KKyMgbG9va3MgZnVydGhlciwgdGhlcmUgYXJlIG5vIHByZXR0eSBjb2RlLgorIworIyBXZSBkZWZpbmUgdHdvIGNsYXNzZXMgaGVyZS4KKyMKKyMgICBNYXJrKHNvdXJjZSwgbGluZSwgY29sdW1uKQorIyBJdCdzIGp1c3QgYSByZWNvcmQgYW5kIGl0cyBvbmx5IHVzZSBpcyBwcm9kdWNpbmcgbmljZSBlcnJvciBtZXNzYWdlcy4KKyMgUGFyc2VyIGRvZXMgbm90IHVzZSBpdCBmb3IgYW55IG90aGVyIHB1cnBvc2VzLgorIworIyAgIFJlYWRlcihzb3VyY2UsIGRhdGEpCisjIFJlYWRlciBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyBvZiBgZGF0YWAgYW5kIGNvbnZlcnRzIGl0IHRvIHVuaWNvZGUuCisjIFJlYWRlciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CisjICAgcmVhZGVyLnBlZWsobGVuZ3RoPTEpIC0gcmV0dXJuIHRoZSBuZXh0IGBsZW5ndGhgIGNoYXJhY3RlcnMKKyMgICByZWFkZXIuZm9yd2FyZChsZW5ndGg9MSkgLSBtb3ZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIGBsZW5ndGhgIGNoYXJhY3RlcnMuCisjICAgcmVhZGVyLmluZGV4IC0gdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIuCisjICAgcmVhZGVyLmxpbmUsIHN0cmVhbS5jb2x1bW4gLSB0aGUgbGluZSBhbmQgdGhlIGNvbHVtbiBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIuCisKK19fYWxsX18gPSBbJ1JlYWRlcicsICdSZWFkZXJFcnJvciddCisKK2Zyb20gLmVycm9yIGltcG9ydCBZQU1MRXJyb3IsIE1hcmsKKworaW1wb3J0IGNvZGVjcywgcmUKKworY2xhc3MgUmVhZGVyRXJyb3IoWUFNTEVycm9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwb3NpdGlvbiwgY2hhcmFjdGVyLCBlbmNvZGluZywgcmVhc29uKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmNoYXJhY3RlciA9IGNoYXJhY3RlcgorICAgICAgICBzZWxmLnBvc2l0aW9uID0gcG9zaXRpb24KKyAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisgICAgICAgIHNlbGYucmVhc29uID0gcmVhc29uCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmNoYXJhY3RlciwgYnl0ZXMpOgorICAgICAgICAgICAgcmV0dXJuICInJXMnIGNvZGVjIGNhbid0IGRlY29kZSBieXRlICN4JTAyeDogJXNcbiIgIFwKKyAgICAgICAgICAgICAgICAgICAgIiAgaW4gXCIlc1wiLCBwb3NpdGlvbiAlZCIgICAgXAorICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmVuY29kaW5nLCBvcmQoc2VsZi5jaGFyYWN0ZXIpLCBzZWxmLnJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUsIHNlbGYucG9zaXRpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gInVuYWNjZXB0YWJsZSBjaGFyYWN0ZXIgI3glMDR4OiAlc1xuIiAgICBcCisgICAgICAgICAgICAgICAgICAgICIgIGluIFwiJXNcIiwgcG9zaXRpb24gJWQiICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5jaGFyYWN0ZXIsIHNlbGYucmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5wb3NpdGlvbikKKworY2xhc3MgUmVhZGVyKG9iamVjdCk6CisgICAgIyBSZWFkZXI6CisgICAgIyAtIGRldGVybWluZXMgdGhlIGRhdGEgZW5jb2RpbmcgYW5kIGNvbnZlcnRzIGl0IHRvIGEgdW5pY29kZSBzdHJpbmcsCisgICAgIyAtIGNoZWNrcyBpZiBjaGFyYWN0ZXJzIGFyZSBpbiBhbGxvd2VkIHJhbmdlLAorICAgICMgLSBhZGRzICdcMCcgdG8gdGhlIGVuZC4KKworICAgICMgUmVhZGVyIGFjY2VwdHMKKyAgICAjICAtIGEgYGJ5dGVzYCBvYmplY3QsCisgICAgIyAgLSBhIGBzdHJgIG9iamVjdCwKKyAgICAjICAtIGEgZmlsZS1saWtlIG9iamVjdCB3aXRoIGl0cyBgcmVhZGAgbWV0aG9kIHJldHVybmluZyBgc3RyYCwKKyAgICAjICAtIGEgZmlsZS1saWtlIG9iamVjdCB3aXRoIGl0cyBgcmVhZGAgbWV0aG9kIHJldHVybmluZyBgdW5pY29kZWAuCisKKyAgICAjIFllYWgsIGl0J3MgdWdseSBhbmQgc2xvdy4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuc3RyZWFtID0gTm9uZQorICAgICAgICBzZWxmLnN0cmVhbV9wb2ludGVyID0gMAorICAgICAgICBzZWxmLmVvZiA9IFRydWUKKyAgICAgICAgc2VsZi5idWZmZXIgPSAnJworICAgICAgICBzZWxmLnBvaW50ZXIgPSAwCisgICAgICAgIHNlbGYucmF3X2J1ZmZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5yYXdfZGVjb2RlID0gTm9uZQorICAgICAgICBzZWxmLmVuY29kaW5nID0gTm9uZQorICAgICAgICBzZWxmLmluZGV4ID0gMAorICAgICAgICBzZWxmLmxpbmUgPSAwCisgICAgICAgIHNlbGYuY29sdW1uID0gMAorICAgICAgICBpZiBpc2luc3RhbmNlKHN0cmVhbSwgc3RyKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9ICI8dW5pY29kZSBzdHJpbmc+IgorICAgICAgICAgICAgc2VsZi5jaGVja19wcmludGFibGUoc3RyZWFtKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzdHJlYW0rJ1wwJworICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RyZWFtLCBieXRlcyk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSAiPGJ5dGUgc3RyaW5nPiIKKyAgICAgICAgICAgIHNlbGYucmF3X2J1ZmZlciA9IHN0cmVhbQorICAgICAgICAgICAgc2VsZi5kZXRlcm1pbmVfZW5jb2RpbmcoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgICAgIHNlbGYubmFtZSA9IGdldGF0dHIoc3RyZWFtLCAnbmFtZScsICI8ZmlsZT4iKQorICAgICAgICAgICAgc2VsZi5lb2YgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5yYXdfYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgc2VsZi5kZXRlcm1pbmVfZW5jb2RpbmcoKQorCisgICAgZGVmIHBlZWsoc2VsZiwgaW5kZXg9MCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlcltzZWxmLnBvaW50ZXIraW5kZXhdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgc2VsZi51cGRhdGUoaW5kZXgrMSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlcltzZWxmLnBvaW50ZXIraW5kZXhdCisKKyAgICBkZWYgcHJlZml4KHNlbGYsIGxlbmd0aD0xKToKKyAgICAgICAgaWYgc2VsZi5wb2ludGVyK2xlbmd0aCA+PSBsZW4oc2VsZi5idWZmZXIpOgorICAgICAgICAgICAgc2VsZi51cGRhdGUobGVuZ3RoKQorICAgICAgICByZXR1cm4gc2VsZi5idWZmZXJbc2VsZi5wb2ludGVyOnNlbGYucG9pbnRlcitsZW5ndGhdCisKKyAgICBkZWYgZm9yd2FyZChzZWxmLCBsZW5ndGg9MSk6CisgICAgICAgIGlmIHNlbGYucG9pbnRlcitsZW5ndGgrMSA+PSBsZW4oc2VsZi5idWZmZXIpOgorICAgICAgICAgICAgc2VsZi51cGRhdGUobGVuZ3RoKzEpCisgICAgICAgIHdoaWxlIGxlbmd0aDoKKyAgICAgICAgICAgIGNoID0gc2VsZi5idWZmZXJbc2VsZi5wb2ludGVyXQorICAgICAgICAgICAgc2VsZi5wb2ludGVyICs9IDEKKyAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICAgICAgaWYgY2ggaW4gJ1xuXHg4NVx1MjAyOFx1MjAyOScgIFwKKyAgICAgICAgICAgICAgICAgICAgb3IgKGNoID09ICdccicgYW5kIHNlbGYuYnVmZmVyW3NlbGYucG9pbnRlcl0gIT0gJ1xuJyk6CisgICAgICAgICAgICAgICAgc2VsZi5saW5lICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbiA9IDAKKyAgICAgICAgICAgIGVsaWYgY2ggIT0gJ1x1RkVGRic6CisgICAgICAgICAgICAgICAgc2VsZi5jb2x1bW4gKz0gMQorICAgICAgICAgICAgbGVuZ3RoIC09IDEKKworICAgIGRlZiBnZXRfbWFyayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdHJlYW0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBNYXJrKHNlbGYubmFtZSwgc2VsZi5pbmRleCwgc2VsZi5saW5lLCBzZWxmLmNvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIsIHNlbGYucG9pbnRlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBNYXJrKHNlbGYubmFtZSwgc2VsZi5pbmRleCwgc2VsZi5saW5lLCBzZWxmLmNvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSkKKworICAgIGRlZiBkZXRlcm1pbmVfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZiBhbmQgKHNlbGYucmF3X2J1ZmZlciBpcyBOb25lIG9yIGxlbihzZWxmLnJhd19idWZmZXIpIDwgMik6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9yYXcoKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYucmF3X2J1ZmZlciwgYnl0ZXMpOgorICAgICAgICAgICAgaWYgc2VsZi5yYXdfYnVmZmVyLnN0YXJ0c3dpdGgoY29kZWNzLkJPTV9VVEYxNl9MRSk6CisgICAgICAgICAgICAgICAgc2VsZi5yYXdfZGVjb2RlID0gY29kZWNzLnV0Zl8xNl9sZV9kZWNvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmVuY29kaW5nID0gJ3V0Zi0xNi1sZScKKyAgICAgICAgICAgIGVsaWYgc2VsZi5yYXdfYnVmZmVyLnN0YXJ0c3dpdGgoY29kZWNzLkJPTV9VVEYxNl9CRSk6CisgICAgICAgICAgICAgICAgc2VsZi5yYXdfZGVjb2RlID0gY29kZWNzLnV0Zl8xNl9iZV9kZWNvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmVuY29kaW5nID0gJ3V0Zi0xNi1iZScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5yYXdfZGVjb2RlID0gY29kZWNzLnV0Zl84X2RlY29kZQorICAgICAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSAndXRmLTgnCisgICAgICAgIHNlbGYudXBkYXRlKDEpCisKKyAgICBOT05fUFJJTlRBQkxFID0gcmUuY29tcGlsZSgnW15ceDA5XHgwQVx4MERceDIwLVx4N0VceDg1XHhBMC1cdUQ3RkZcdUUwMDAtXHVGRkZEXFUwMDAxMDAwMC1cVTAwMTBmZmZmXScpCisgICAgZGVmIGNoZWNrX3ByaW50YWJsZShzZWxmLCBkYXRhKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLk5PTl9QUklOVEFCTEUuc2VhcmNoKGRhdGEpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgY2hhcmFjdGVyID0gbWF0Y2guZ3JvdXAoKQorICAgICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmluZGV4KyhsZW4oc2VsZi5idWZmZXIpLXNlbGYucG9pbnRlcikrbWF0Y2guc3RhcnQoKQorICAgICAgICAgICAgcmFpc2UgUmVhZGVyRXJyb3Ioc2VsZi5uYW1lLCBwb3NpdGlvbiwgb3JkKGNoYXJhY3RlciksCisgICAgICAgICAgICAgICAgICAgICd1bmljb2RlJywgInNwZWNpYWwgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQiKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBsZW5ndGgpOgorICAgICAgICBpZiBzZWxmLnJhd19idWZmZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyW3NlbGYucG9pbnRlcjpdCisgICAgICAgIHNlbGYucG9pbnRlciA9IDAKKyAgICAgICAgd2hpbGUgbGVuKHNlbGYuYnVmZmVyKSA8IGxlbmd0aDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9yYXcoKQorICAgICAgICAgICAgaWYgc2VsZi5yYXdfZGVjb2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSwgY29udmVydGVkID0gc2VsZi5yYXdfZGVjb2RlKHNlbGYucmF3X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaWN0Jywgc2VsZi5lb2YpCisgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IHNlbGYucmF3X2J1ZmZlcltleGMuc3RhcnRdCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RyZWFtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBzZWxmLnN0cmVhbV9wb2ludGVyLWxlbihzZWxmLnJhd19idWZmZXIpK2V4Yy5zdGFydAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBleGMuc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVhZGVyRXJyb3Ioc2VsZi5uYW1lLCBwb3NpdGlvbiwgY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy5lbmNvZGluZywgZXhjLnJlYXNvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmF3X2J1ZmZlcgorICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IGxlbihkYXRhKQorICAgICAgICAgICAgc2VsZi5jaGVja19wcmludGFibGUoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEKKyAgICAgICAgICAgIHNlbGYucmF3X2J1ZmZlciA9IHNlbGYucmF3X2J1ZmZlcltjb252ZXJ0ZWQ6XQorICAgICAgICAgICAgaWYgc2VsZi5lb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIgKz0gJ1wwJworICAgICAgICAgICAgICAgIHNlbGYucmF3X2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIHVwZGF0ZV9yYXcoc2VsZiwgc2l6ZT00MDk2KToKKyAgICAgICAgZGF0YSA9IHNlbGYuc3RyZWFtLnJlYWQoc2l6ZSkKKyAgICAgICAgaWYgc2VsZi5yYXdfYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnJhd19idWZmZXIgPSBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJhd19idWZmZXIgKz0gZGF0YQorICAgICAgICBzZWxmLnN0cmVhbV9wb2ludGVyICs9IGxlbihkYXRhKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHNlbGYuZW9mID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvcmVwcmVzZW50ZXIucHkgYi9saWIveWFtbC9yZXByZXNlbnRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDhjYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvcmVwcmVzZW50ZXIucHkKQEAgLTAsMCArMSwzODkgQEAKKworX19hbGxfXyA9IFsnQmFzZVJlcHJlc2VudGVyJywgJ1NhZmVSZXByZXNlbnRlcicsICdSZXByZXNlbnRlcicsCisgICAgJ1JlcHJlc2VudGVyRXJyb3InXQorCitmcm9tIC5lcnJvciBpbXBvcnQgKgorZnJvbSAubm9kZXMgaW1wb3J0ICoKKworaW1wb3J0IGRhdGV0aW1lLCBjb3B5cmVnLCB0eXBlcywgYmFzZTY0LCBjb2xsZWN0aW9ucworCitjbGFzcyBSZXByZXNlbnRlckVycm9yKFlBTUxFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBCYXNlUmVwcmVzZW50ZXI6CisKKyAgICB5YW1sX3JlcHJlc2VudGVycyA9IHt9CisgICAgeWFtbF9tdWx0aV9yZXByZXNlbnRlcnMgPSB7fQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHRfc3R5bGU9Tm9uZSwgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlLCBzb3J0X2tleXM9VHJ1ZSk6CisgICAgICAgIHNlbGYuZGVmYXVsdF9zdHlsZSA9IGRlZmF1bHRfc3R5bGUKKyAgICAgICAgc2VsZi5zb3J0X2tleXMgPSBzb3J0X2tleXMKKyAgICAgICAgc2VsZi5kZWZhdWx0X2Zsb3dfc3R5bGUgPSBkZWZhdWx0X2Zsb3dfc3R5bGUKKyAgICAgICAgc2VsZi5yZXByZXNlbnRlZF9vYmplY3RzID0ge30KKyAgICAgICAgc2VsZi5vYmplY3Rfa2VlcGVyID0gW10KKyAgICAgICAgc2VsZi5hbGlhc19rZXkgPSBOb25lCisKKyAgICBkZWYgcmVwcmVzZW50KHNlbGYsIGRhdGEpOgorICAgICAgICBub2RlID0gc2VsZi5yZXByZXNlbnRfZGF0YShkYXRhKQorICAgICAgICBzZWxmLnNlcmlhbGl6ZShub2RlKQorICAgICAgICBzZWxmLnJlcHJlc2VudGVkX29iamVjdHMgPSB7fQorICAgICAgICBzZWxmLm9iamVjdF9rZWVwZXIgPSBbXQorICAgICAgICBzZWxmLmFsaWFzX2tleSA9IE5vbmUKKworICAgIGRlZiByZXByZXNlbnRfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfYWxpYXNlcyhkYXRhKToKKyAgICAgICAgICAgIHNlbGYuYWxpYXNfa2V5ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hbGlhc19rZXkgPSBpZChkYXRhKQorICAgICAgICBpZiBzZWxmLmFsaWFzX2tleSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuYWxpYXNfa2V5IGluIHNlbGYucmVwcmVzZW50ZWRfb2JqZWN0czoKKyAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5yZXByZXNlbnRlZF9vYmplY3RzW3NlbGYuYWxpYXNfa2V5XQorICAgICAgICAgICAgICAgICNpZiBub2RlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyAgICByYWlzZSBSZXByZXNlbnRlckVycm9yKCJyZWN1cnNpdmUgb2JqZWN0cyBhcmUgbm90IGFsbG93ZWQ6ICVyIiAlIGRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUKKyAgICAgICAgICAgICNzZWxmLnJlcHJlc2VudGVkX29iamVjdHNbYWxpYXNfa2V5XSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYub2JqZWN0X2tlZXBlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgZGF0YV90eXBlcyA9IHR5cGUoZGF0YSkuX19tcm9fXworICAgICAgICBpZiBkYXRhX3R5cGVzWzBdIGluIHNlbGYueWFtbF9yZXByZXNlbnRlcnM6CisgICAgICAgICAgICBub2RlID0gc2VsZi55YW1sX3JlcHJlc2VudGVyc1tkYXRhX3R5cGVzWzBdXShzZWxmLCBkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGRhdGFfdHlwZSBpbiBkYXRhX3R5cGVzOgorICAgICAgICAgICAgICAgIGlmIGRhdGFfdHlwZSBpbiBzZWxmLnlhbWxfbXVsdGlfcmVwcmVzZW50ZXJzOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi55YW1sX211bHRpX3JlcHJlc2VudGVyc1tkYXRhX3R5cGVdKHNlbGYsIGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIE5vbmUgaW4gc2VsZi55YW1sX211bHRpX3JlcHJlc2VudGVyczoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHNlbGYueWFtbF9tdWx0aV9yZXByZXNlbnRlcnNbTm9uZV0oc2VsZiwgZGF0YSkKKyAgICAgICAgICAgICAgICBlbGlmIE5vbmUgaW4gc2VsZi55YW1sX3JlcHJlc2VudGVyczoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHNlbGYueWFtbF9yZXByZXNlbnRlcnNbTm9uZV0oc2VsZiwgZGF0YSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gU2NhbGFyTm9kZShOb25lLCBzdHIoZGF0YSkpCisgICAgICAgICNpZiBhbGlhc19rZXkgaXMgbm90IE5vbmU6CisgICAgICAgICMgICAgc2VsZi5yZXByZXNlbnRlZF9vYmplY3RzW2FsaWFzX2tleV0gPSBub2RlCisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgYWRkX3JlcHJlc2VudGVyKGNscywgZGF0YV90eXBlLCByZXByZXNlbnRlcik6CisgICAgICAgIGlmIG5vdCAneWFtbF9yZXByZXNlbnRlcnMnIGluIGNscy5fX2RpY3RfXzoKKyAgICAgICAgICAgIGNscy55YW1sX3JlcHJlc2VudGVycyA9IGNscy55YW1sX3JlcHJlc2VudGVycy5jb3B5KCkKKyAgICAgICAgY2xzLnlhbWxfcmVwcmVzZW50ZXJzW2RhdGFfdHlwZV0gPSByZXByZXNlbnRlcgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFkZF9tdWx0aV9yZXByZXNlbnRlcihjbHMsIGRhdGFfdHlwZSwgcmVwcmVzZW50ZXIpOgorICAgICAgICBpZiBub3QgJ3lhbWxfbXVsdGlfcmVwcmVzZW50ZXJzJyBpbiBjbHMuX19kaWN0X186CisgICAgICAgICAgICBjbHMueWFtbF9tdWx0aV9yZXByZXNlbnRlcnMgPSBjbHMueWFtbF9tdWx0aV9yZXByZXNlbnRlcnMuY29weSgpCisgICAgICAgIGNscy55YW1sX211bHRpX3JlcHJlc2VudGVyc1tkYXRhX3R5cGVdID0gcmVwcmVzZW50ZXIKKworICAgIGRlZiByZXByZXNlbnRfc2NhbGFyKHNlbGYsIHRhZywgdmFsdWUsIHN0eWxlPU5vbmUpOgorICAgICAgICBpZiBzdHlsZSBpcyBOb25lOgorICAgICAgICAgICAgc3R5bGUgPSBzZWxmLmRlZmF1bHRfc3R5bGUKKyAgICAgICAgbm9kZSA9IFNjYWxhck5vZGUodGFnLCB2YWx1ZSwgc3R5bGU9c3R5bGUpCisgICAgICAgIGlmIHNlbGYuYWxpYXNfa2V5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5yZXByZXNlbnRlZF9vYmplY3RzW3NlbGYuYWxpYXNfa2V5XSA9IG5vZGUKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiByZXByZXNlbnRfc2VxdWVuY2Uoc2VsZiwgdGFnLCBzZXF1ZW5jZSwgZmxvd19zdHlsZT1Ob25lKToKKyAgICAgICAgdmFsdWUgPSBbXQorICAgICAgICBub2RlID0gU2VxdWVuY2VOb2RlKHRhZywgdmFsdWUsIGZsb3dfc3R5bGU9Zmxvd19zdHlsZSkKKyAgICAgICAgaWYgc2VsZi5hbGlhc19rZXkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnJlcHJlc2VudGVkX29iamVjdHNbc2VsZi5hbGlhc19rZXldID0gbm9kZQorICAgICAgICBiZXN0X3N0eWxlID0gVHJ1ZQorICAgICAgICBmb3IgaXRlbSBpbiBzZXF1ZW5jZToKKyAgICAgICAgICAgIG5vZGVfaXRlbSA9IHNlbGYucmVwcmVzZW50X2RhdGEoaXRlbSkKKyAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShub2RlX2l0ZW0sIFNjYWxhck5vZGUpIGFuZCBub3Qgbm9kZV9pdGVtLnN0eWxlKToKKyAgICAgICAgICAgICAgICBiZXN0X3N0eWxlID0gRmFsc2UKKyAgICAgICAgICAgIHZhbHVlLmFwcGVuZChub2RlX2l0ZW0pCisgICAgICAgIGlmIGZsb3dfc3R5bGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuZGVmYXVsdF9mbG93X3N0eWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5vZGUuZmxvd19zdHlsZSA9IHNlbGYuZGVmYXVsdF9mbG93X3N0eWxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5vZGUuZmxvd19zdHlsZSA9IGJlc3Rfc3R5bGUKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiByZXByZXNlbnRfbWFwcGluZyhzZWxmLCB0YWcsIG1hcHBpbmcsIGZsb3dfc3R5bGU9Tm9uZSk6CisgICAgICAgIHZhbHVlID0gW10KKyAgICAgICAgbm9kZSA9IE1hcHBpbmdOb2RlKHRhZywgdmFsdWUsIGZsb3dfc3R5bGU9Zmxvd19zdHlsZSkKKyAgICAgICAgaWYgc2VsZi5hbGlhc19rZXkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnJlcHJlc2VudGVkX29iamVjdHNbc2VsZi5hbGlhc19rZXldID0gbm9kZQorICAgICAgICBiZXN0X3N0eWxlID0gVHJ1ZQorICAgICAgICBpZiBoYXNhdHRyKG1hcHBpbmcsICdpdGVtcycpOgorICAgICAgICAgICAgbWFwcGluZyA9IGxpc3QobWFwcGluZy5pdGVtcygpKQorICAgICAgICAgICAgaWYgc2VsZi5zb3J0X2tleXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gc29ydGVkKG1hcHBpbmcpCisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgaXRlbV9rZXksIGl0ZW1fdmFsdWUgaW4gbWFwcGluZzoKKyAgICAgICAgICAgIG5vZGVfa2V5ID0gc2VsZi5yZXByZXNlbnRfZGF0YShpdGVtX2tleSkKKyAgICAgICAgICAgIG5vZGVfdmFsdWUgPSBzZWxmLnJlcHJlc2VudF9kYXRhKGl0ZW1fdmFsdWUpCisgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2Uobm9kZV9rZXksIFNjYWxhck5vZGUpIGFuZCBub3Qgbm9kZV9rZXkuc3R5bGUpOgorICAgICAgICAgICAgICAgIGJlc3Rfc3R5bGUgPSBGYWxzZQorICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKG5vZGVfdmFsdWUsIFNjYWxhck5vZGUpIGFuZCBub3Qgbm9kZV92YWx1ZS5zdHlsZSk6CisgICAgICAgICAgICAgICAgYmVzdF9zdHlsZSA9IEZhbHNlCisgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoKG5vZGVfa2V5LCBub2RlX3ZhbHVlKSkKKyAgICAgICAgaWYgZmxvd19zdHlsZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5kZWZhdWx0X2Zsb3dfc3R5bGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbm9kZS5mbG93X3N0eWxlID0gc2VsZi5kZWZhdWx0X2Zsb3dfc3R5bGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm9kZS5mbG93X3N0eWxlID0gYmVzdF9zdHlsZQorICAgICAgICByZXR1cm4gbm9kZQorCisgICAgZGVmIGlnbm9yZV9hbGlhc2VzKHNlbGYsIGRhdGEpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgU2FmZVJlcHJlc2VudGVyKEJhc2VSZXByZXNlbnRlcik6CisKKyAgICBkZWYgaWdub3JlX2FsaWFzZXMoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgdHVwbGUpIGFuZCBkYXRhID09ICgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCAoc3RyLCBieXRlcywgYm9vbCwgaW50LCBmbG9hdCkpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZXByZXNlbnRfbm9uZShzZWxmLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X3NjYWxhcigndGFnOnlhbWwub3JnLDIwMDI6bnVsbCcsICdudWxsJykKKworICAgIGRlZiByZXByZXNlbnRfc3RyKHNlbGYsIGRhdGEpOgorICAgICAgICByZXR1cm4gc2VsZi5yZXByZXNlbnRfc2NhbGFyKCd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLCBkYXRhKQorCisgICAgZGVmIHJlcHJlc2VudF9iaW5hcnkoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIGhhc2F0dHIoYmFzZTY0LCAnZW5jb2RlYnl0ZXMnKToKKyAgICAgICAgICAgIGRhdGEgPSBiYXNlNjQuZW5jb2RlYnl0ZXMoZGF0YSkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhID0gYmFzZTY0LmVuY29kZXN0cmluZyhkYXRhKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X3NjYWxhcigndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5JywgZGF0YSwgc3R5bGU9J3wnKQorCisgICAgZGVmIHJlcHJlc2VudF9ib29sKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgdmFsdWUgPSAndHJ1ZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gJ2ZhbHNlJworICAgICAgICByZXR1cm4gc2VsZi5yZXByZXNlbnRfc2NhbGFyKCd0YWc6eWFtbC5vcmcsMjAwMjpib29sJywgdmFsdWUpCisKKyAgICBkZWYgcmVwcmVzZW50X2ludChzZWxmLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X3NjYWxhcigndGFnOnlhbWwub3JnLDIwMDI6aW50Jywgc3RyKGRhdGEpKQorCisgICAgaW5mX3ZhbHVlID0gMWUzMDAKKyAgICB3aGlsZSByZXByKGluZl92YWx1ZSkgIT0gcmVwcihpbmZfdmFsdWUqaW5mX3ZhbHVlKToKKyAgICAgICAgaW5mX3ZhbHVlICo9IGluZl92YWx1ZQorCisgICAgZGVmIHJlcHJlc2VudF9mbG9hdChzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgZGF0YSAhPSBkYXRhIG9yIChkYXRhID09IDAuMCBhbmQgZGF0YSA9PSAxLjApOgorICAgICAgICAgICAgdmFsdWUgPSAnLm5hbicKKyAgICAgICAgZWxpZiBkYXRhID09IHNlbGYuaW5mX3ZhbHVlOgorICAgICAgICAgICAgdmFsdWUgPSAnLmluZicKKyAgICAgICAgZWxpZiBkYXRhID09IC1zZWxmLmluZl92YWx1ZToKKyAgICAgICAgICAgIHZhbHVlID0gJy0uaW5mJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSByZXByKGRhdGEpLmxvd2VyKCkKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IGluIHNvbWUgY2FzZXMgYHJlcHIoZGF0YSlgIHJlcHJlc2VudHMgYSBmbG9hdCBudW1iZXIKKyAgICAgICAgICAgICMgd2l0aG91dCB0aGUgZGVjaW1hbCBwYXJ0cy4gIEZvciBpbnN0YW5jZToKKyAgICAgICAgICAgICMgICA+Pj4gcmVwcigxZTE3KQorICAgICAgICAgICAgIyAgICcxZTE3JworICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG5vdCBhIHZhbGlkIGZsb2F0IHJlcHJlc2VudGF0aW9uIGFjY29yZGluZworICAgICAgICAgICAgIyB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYCEhZmxvYXRgIHRhZy4gIFdlIGZpeCB0aGlzIGJ5IGFkZGluZworICAgICAgICAgICAgIyAnLjAnIGJlZm9yZSB0aGUgJ2UnIHN5bWJvbC4KKyAgICAgICAgICAgIGlmICcuJyBub3QgaW4gdmFsdWUgYW5kICdlJyBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ2UnLCAnLjBlJywgMSkKKyAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X3NjYWxhcigndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLCB2YWx1ZSkKKworICAgIGRlZiByZXByZXNlbnRfbGlzdChzZWxmLCBkYXRhKToKKyAgICAgICAgI3BhaXJzID0gKGxlbihkYXRhKSA+IDAgYW5kIGlzaW5zdGFuY2UoZGF0YSwgbGlzdCkpCisgICAgICAgICNpZiBwYWlyczoKKyAgICAgICAgIyAgICBmb3IgaXRlbSBpbiBkYXRhOgorICAgICAgICAjICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdGVtLCB0dXBsZSkgb3IgbGVuKGl0ZW0pICE9IDI6CisgICAgICAgICMgICAgICAgICAgICBwYWlycyA9IEZhbHNlCisgICAgICAgICMgICAgICAgICAgICBicmVhaworICAgICAgICAjaWYgbm90IHBhaXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X3NlcXVlbmNlKCd0YWc6eWFtbC5vcmcsMjAwMjpzZXEnLCBkYXRhKQorICAgICAgICAjdmFsdWUgPSBbXQorICAgICAgICAjZm9yIGl0ZW1fa2V5LCBpdGVtX3ZhbHVlIGluIGRhdGE6CisgICAgICAgICMgICAgdmFsdWUuYXBwZW5kKHNlbGYucmVwcmVzZW50X21hcHBpbmcodSd0YWc6eWFtbC5vcmcsMjAwMjptYXAnLAorICAgICAgICAjICAgICAgICBbKGl0ZW1fa2V5LCBpdGVtX3ZhbHVlKV0pKQorICAgICAgICAjcmV0dXJuIFNlcXVlbmNlTm9kZSh1J3RhZzp5YW1sLm9yZywyMDAyOnBhaXJzJywgdmFsdWUpCisKKyAgICBkZWYgcmVwcmVzZW50X2RpY3Qoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLnJlcHJlc2VudF9tYXBwaW5nKCd0YWc6eWFtbC5vcmcsMjAwMjptYXAnLCBkYXRhKQorCisgICAgZGVmIHJlcHJlc2VudF9zZXQoc2VsZiwgZGF0YSk6CisgICAgICAgIHZhbHVlID0ge30KKyAgICAgICAgZm9yIGtleSBpbiBkYXRhOgorICAgICAgICAgICAgdmFsdWVba2V5XSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X21hcHBpbmcoJ3RhZzp5YW1sLm9yZywyMDAyOnNldCcsIHZhbHVlKQorCisgICAgZGVmIHJlcHJlc2VudF9kYXRlKHNlbGYsIGRhdGEpOgorICAgICAgICB2YWx1ZSA9IGRhdGEuaXNvZm9ybWF0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X3NjYWxhcigndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJywgdmFsdWUpCisKKyAgICBkZWYgcmVwcmVzZW50X2RhdGV0aW1lKHNlbGYsIGRhdGEpOgorICAgICAgICB2YWx1ZSA9IGRhdGEuaXNvZm9ybWF0KCcgJykKKyAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X3NjYWxhcigndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJywgdmFsdWUpCisKKyAgICBkZWYgcmVwcmVzZW50X3lhbWxfb2JqZWN0KHNlbGYsIHRhZywgZGF0YSwgY2xzLCBmbG93X3N0eWxlPU5vbmUpOgorICAgICAgICBpZiBoYXNhdHRyKGRhdGEsICdfX2dldHN0YXRlX18nKToKKyAgICAgICAgICAgIHN0YXRlID0gZGF0YS5fX2dldHN0YXRlX18oKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdGUgPSBkYXRhLl9fZGljdF9fLmNvcHkoKQorICAgICAgICByZXR1cm4gc2VsZi5yZXByZXNlbnRfbWFwcGluZyh0YWcsIHN0YXRlLCBmbG93X3N0eWxlPWZsb3dfc3R5bGUpCisKKyAgICBkZWYgcmVwcmVzZW50X3VuZGVmaW5lZChzZWxmLCBkYXRhKToKKyAgICAgICAgcmFpc2UgUmVwcmVzZW50ZXJFcnJvcigiY2Fubm90IHJlcHJlc2VudCBhbiBvYmplY3QiLCBkYXRhKQorCitTYWZlUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKHR5cGUoTm9uZSksCisgICAgICAgIFNhZmVSZXByZXNlbnRlci5yZXByZXNlbnRfbm9uZSkKKworU2FmZVJlcHJlc2VudGVyLmFkZF9yZXByZXNlbnRlcihzdHIsCisgICAgICAgIFNhZmVSZXByZXNlbnRlci5yZXByZXNlbnRfc3RyKQorCitTYWZlUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKGJ5dGVzLAorICAgICAgICBTYWZlUmVwcmVzZW50ZXIucmVwcmVzZW50X2JpbmFyeSkKKworU2FmZVJlcHJlc2VudGVyLmFkZF9yZXByZXNlbnRlcihib29sLAorICAgICAgICBTYWZlUmVwcmVzZW50ZXIucmVwcmVzZW50X2Jvb2wpCisKK1NhZmVSZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIoaW50LAorICAgICAgICBTYWZlUmVwcmVzZW50ZXIucmVwcmVzZW50X2ludCkKKworU2FmZVJlcHJlc2VudGVyLmFkZF9yZXByZXNlbnRlcihmbG9hdCwKKyAgICAgICAgU2FmZVJlcHJlc2VudGVyLnJlcHJlc2VudF9mbG9hdCkKKworU2FmZVJlcHJlc2VudGVyLmFkZF9yZXByZXNlbnRlcihsaXN0LAorICAgICAgICBTYWZlUmVwcmVzZW50ZXIucmVwcmVzZW50X2xpc3QpCisKK1NhZmVSZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIodHVwbGUsCisgICAgICAgIFNhZmVSZXByZXNlbnRlci5yZXByZXNlbnRfbGlzdCkKKworU2FmZVJlcHJlc2VudGVyLmFkZF9yZXByZXNlbnRlcihkaWN0LAorICAgICAgICBTYWZlUmVwcmVzZW50ZXIucmVwcmVzZW50X2RpY3QpCisKK1NhZmVSZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIoc2V0LAorICAgICAgICBTYWZlUmVwcmVzZW50ZXIucmVwcmVzZW50X3NldCkKKworU2FmZVJlcHJlc2VudGVyLmFkZF9yZXByZXNlbnRlcihkYXRldGltZS5kYXRlLAorICAgICAgICBTYWZlUmVwcmVzZW50ZXIucmVwcmVzZW50X2RhdGUpCisKK1NhZmVSZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIoZGF0ZXRpbWUuZGF0ZXRpbWUsCisgICAgICAgIFNhZmVSZXByZXNlbnRlci5yZXByZXNlbnRfZGF0ZXRpbWUpCisKK1NhZmVSZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIoTm9uZSwKKyAgICAgICAgU2FmZVJlcHJlc2VudGVyLnJlcHJlc2VudF91bmRlZmluZWQpCisKK2NsYXNzIFJlcHJlc2VudGVyKFNhZmVSZXByZXNlbnRlcik6CisKKyAgICBkZWYgcmVwcmVzZW50X2NvbXBsZXgoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIGRhdGEuaW1hZyA9PSAwLjA6CisgICAgICAgICAgICBkYXRhID0gJyVyJyAlIGRhdGEucmVhbAorICAgICAgICBlbGlmIGRhdGEucmVhbCA9PSAwLjA6CisgICAgICAgICAgICBkYXRhID0gJyVyaicgJSBkYXRhLmltYWcKKyAgICAgICAgZWxpZiBkYXRhLmltYWcgPiAwOgorICAgICAgICAgICAgZGF0YSA9ICclcislcmonICUgKGRhdGEucmVhbCwgZGF0YS5pbWFnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9ICclciVyaicgJSAoZGF0YS5yZWFsLCBkYXRhLmltYWcpCisgICAgICAgIHJldHVybiBzZWxmLnJlcHJlc2VudF9zY2FsYXIoJ3RhZzp5YW1sLm9yZywyMDAyOnB5dGhvbi9jb21wbGV4JywgZGF0YSkKKworICAgIGRlZiByZXByZXNlbnRfdHVwbGUoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLnJlcHJlc2VudF9zZXF1ZW5jZSgndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL3R1cGxlJywgZGF0YSkKKworICAgIGRlZiByZXByZXNlbnRfbmFtZShzZWxmLCBkYXRhKToKKyAgICAgICAgbmFtZSA9ICclcy4lcycgJSAoZGF0YS5fX21vZHVsZV9fLCBkYXRhLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4gc2VsZi5yZXByZXNlbnRfc2NhbGFyKCd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vbmFtZTonK25hbWUsICcnKQorCisgICAgZGVmIHJlcHJlc2VudF9tb2R1bGUoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLnJlcHJlc2VudF9zY2FsYXIoCisgICAgICAgICAgICAgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnB5dGhvbi9tb2R1bGU6JytkYXRhLl9fbmFtZV9fLCAnJykKKworICAgIGRlZiByZXByZXNlbnRfb2JqZWN0KHNlbGYsIGRhdGEpOgorICAgICAgICAjIFdlIHVzZSBfX3JlZHVjZV9fIEFQSSB0byBzYXZlIHRoZSBkYXRhLiBkYXRhLl9fcmVkdWNlX18gcmV0dXJucworICAgICAgICAjIGEgdHVwbGUgb2YgbGVuZ3RoIDItNToKKyAgICAgICAgIyAgIChmdW5jdGlvbiwgYXJncywgc3RhdGUsIGxpc3RpdGVtcywgZGljdGl0ZW1zKQorCisgICAgICAgICMgRm9yIHJlY29uc3RydWN0aW5nLCB3ZSBjYWxscyBmdW5jdGlvbigqYXJncyksIHRoZW4gc2V0IGl0cyBzdGF0ZSwKKyAgICAgICAgIyBsaXN0aXRlbXMsIGFuZCBkaWN0aXRlbXMgaWYgdGhleSBhcmUgbm90IE5vbmUuCisKKyAgICAgICAgIyBBIHNwZWNpYWwgY2FzZSBpcyB3aGVuIGZ1bmN0aW9uLl9fbmFtZV9fID09ICdfX25ld29ial9fJy4gSW4gdGhpcworICAgICAgICAjIGNhc2Ugd2UgY3JlYXRlIHRoZSBvYmplY3Qgd2l0aCBhcmdzWzBdLl9fbmV3X18oKmFyZ3MpLgorCisgICAgICAgICMgQW5vdGhlciBzcGVjaWFsIGNhc2UgaXMgd2hlbiBfX3JlZHVjZV9fIHJldHVybnMgYSBzdHJpbmcgLSB3ZSBkb24ndAorICAgICAgICAjIHN1cHBvcnQgaXQuCisKKyAgICAgICAgIyBXZSBwcm9kdWNlIGEgISFweXRob24vb2JqZWN0LCAhIXB5dGhvbi9vYmplY3QvbmV3IG9yCisgICAgICAgICMgISFweXRob24vb2JqZWN0L2FwcGx5IG5vZGUuCisKKyAgICAgICAgY2xzID0gdHlwZShkYXRhKQorICAgICAgICBpZiBjbHMgaW4gY29weXJlZy5kaXNwYXRjaF90YWJsZToKKyAgICAgICAgICAgIHJlZHVjZSA9IGNvcHlyZWcuZGlzcGF0Y2hfdGFibGVbY2xzXShkYXRhKQorICAgICAgICBlbGlmIGhhc2F0dHIoZGF0YSwgJ19fcmVkdWNlX2V4X18nKToKKyAgICAgICAgICAgIHJlZHVjZSA9IGRhdGEuX19yZWR1Y2VfZXhfXygyKQorICAgICAgICBlbGlmIGhhc2F0dHIoZGF0YSwgJ19fcmVkdWNlX18nKToKKyAgICAgICAgICAgIHJlZHVjZSA9IGRhdGEuX19yZWR1Y2VfXygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSZXByZXNlbnRlckVycm9yKCJjYW5ub3QgcmVwcmVzZW50IGFuIG9iamVjdCIsIGRhdGEpCisgICAgICAgIHJlZHVjZSA9IChsaXN0KHJlZHVjZSkrW05vbmVdKjUpWzo1XQorICAgICAgICBmdW5jdGlvbiwgYXJncywgc3RhdGUsIGxpc3RpdGVtcywgZGljdGl0ZW1zID0gcmVkdWNlCisgICAgICAgIGFyZ3MgPSBsaXN0KGFyZ3MpCisgICAgICAgIGlmIHN0YXRlIGlzIE5vbmU6CisgICAgICAgICAgICBzdGF0ZSA9IHt9CisgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpc3RpdGVtcyA9IGxpc3QobGlzdGl0ZW1zKQorICAgICAgICBpZiBkaWN0aXRlbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkaWN0aXRlbXMgPSBkaWN0KGRpY3RpdGVtcykKKyAgICAgICAgaWYgZnVuY3Rpb24uX19uYW1lX18gPT0gJ19fbmV3b2JqX18nOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBhcmdzWzBdCisgICAgICAgICAgICBhcmdzID0gYXJnc1sxOl0KKyAgICAgICAgICAgIHRhZyA9ICd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vb2JqZWN0L25ldzonCisgICAgICAgICAgICBuZXdvYmogPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YWcgPSAndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL29iamVjdC9hcHBseTonCisgICAgICAgICAgICBuZXdvYmogPSBGYWxzZQorICAgICAgICBmdW5jdGlvbl9uYW1lID0gJyVzLiVzJyAlIChmdW5jdGlvbi5fX21vZHVsZV9fLCBmdW5jdGlvbi5fX25hbWVfXykKKyAgICAgICAgaWYgbm90IGFyZ3MgYW5kIG5vdCBsaXN0aXRlbXMgYW5kIG5vdCBkaWN0aXRlbXMgXAorICAgICAgICAgICAgICAgIGFuZCBpc2luc3RhbmNlKHN0YXRlLCBkaWN0KSBhbmQgbmV3b2JqOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVwcmVzZW50X21hcHBpbmcoCisgICAgICAgICAgICAgICAgICAgICd0YWc6eWFtbC5vcmcsMjAwMjpweXRob24vb2JqZWN0OicrZnVuY3Rpb25fbmFtZSwgc3RhdGUpCisgICAgICAgIGlmIG5vdCBsaXN0aXRlbXMgYW5kIG5vdCBkaWN0aXRlbXMgIFwKKyAgICAgICAgICAgICAgICBhbmQgaXNpbnN0YW5jZShzdGF0ZSwgZGljdCkgYW5kIG5vdCBzdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlcHJlc2VudF9zZXF1ZW5jZSh0YWcrZnVuY3Rpb25fbmFtZSwgYXJncykKKyAgICAgICAgdmFsdWUgPSB7fQorICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgdmFsdWVbJ2FyZ3MnXSA9IGFyZ3MKKyAgICAgICAgaWYgc3RhdGUgb3Igbm90IGlzaW5zdGFuY2Uoc3RhdGUsIGRpY3QpOgorICAgICAgICAgICAgdmFsdWVbJ3N0YXRlJ10gPSBzdGF0ZQorICAgICAgICBpZiBsaXN0aXRlbXM6CisgICAgICAgICAgICB2YWx1ZVsnbGlzdGl0ZW1zJ10gPSBsaXN0aXRlbXMKKyAgICAgICAgaWYgZGljdGl0ZW1zOgorICAgICAgICAgICAgdmFsdWVbJ2RpY3RpdGVtcyddID0gZGljdGl0ZW1zCisgICAgICAgIHJldHVybiBzZWxmLnJlcHJlc2VudF9tYXBwaW5nKHRhZytmdW5jdGlvbl9uYW1lLCB2YWx1ZSkKKworICAgIGRlZiByZXByZXNlbnRfb3JkZXJlZF9kaWN0KHNlbGYsIGRhdGEpOgorICAgICAgICAjIFByb3ZpZGUgdW5pZm9ybSByZXByZXNlbnRhdGlvbiBhY3Jvc3MgZGlmZmVyZW50IFB5dGhvbiB2ZXJzaW9ucy4KKyAgICAgICAgZGF0YV90eXBlID0gdHlwZShkYXRhKQorICAgICAgICB0YWcgPSAndGFnOnlhbWwub3JnLDIwMDI6cHl0aG9uL29iamVjdC9hcHBseTolcy4lcycgXAorICAgICAgICAgICAgICAgICUgKGRhdGFfdHlwZS5fX21vZHVsZV9fLCBkYXRhX3R5cGUuX19uYW1lX18pCisgICAgICAgIGl0ZW1zID0gW1trZXksIHZhbHVlXSBmb3Iga2V5LCB2YWx1ZSBpbiBkYXRhLml0ZW1zKCldCisgICAgICAgIHJldHVybiBzZWxmLnJlcHJlc2VudF9zZXF1ZW5jZSh0YWcsIFtpdGVtc10pCisKK1JlcHJlc2VudGVyLmFkZF9yZXByZXNlbnRlcihjb21wbGV4LAorICAgICAgICBSZXByZXNlbnRlci5yZXByZXNlbnRfY29tcGxleCkKKworUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKHR1cGxlLAorICAgICAgICBSZXByZXNlbnRlci5yZXByZXNlbnRfdHVwbGUpCisKK1JlcHJlc2VudGVyLmFkZF9tdWx0aV9yZXByZXNlbnRlcih0eXBlLAorICAgICAgICBSZXByZXNlbnRlci5yZXByZXNlbnRfbmFtZSkKKworUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0LAorICAgICAgICBSZXByZXNlbnRlci5yZXByZXNlbnRfb3JkZXJlZF9kaWN0KQorCitSZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIodHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICBSZXByZXNlbnRlci5yZXByZXNlbnRfbmFtZSkKKworUmVwcmVzZW50ZXIuYWRkX3JlcHJlc2VudGVyKHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUsCisgICAgICAgIFJlcHJlc2VudGVyLnJlcHJlc2VudF9uYW1lKQorCitSZXByZXNlbnRlci5hZGRfcmVwcmVzZW50ZXIodHlwZXMuTW9kdWxlVHlwZSwKKyAgICAgICAgUmVwcmVzZW50ZXIucmVwcmVzZW50X21vZHVsZSkKKworUmVwcmVzZW50ZXIuYWRkX211bHRpX3JlcHJlc2VudGVyKG9iamVjdCwKKyAgICAgICAgUmVwcmVzZW50ZXIucmVwcmVzZW50X29iamVjdCkKKwpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvcmVzb2x2ZXIucHkgYi9saWIveWFtbC9yZXNvbHZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTIyYmRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3lhbWwvcmVzb2x2ZXIucHkKQEAgLTAsMCArMSwyMjcgQEAKKworX19hbGxfXyA9IFsnQmFzZVJlc29sdmVyJywgJ1Jlc29sdmVyJ10KKworZnJvbSAuZXJyb3IgaW1wb3J0ICoKK2Zyb20gLm5vZGVzIGltcG9ydCAqCisKK2ltcG9ydCByZQorCitjbGFzcyBSZXNvbHZlckVycm9yKFlBTUxFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBCYXNlUmVzb2x2ZXI6CisKKyAgICBERUZBVUxUX1NDQUxBUl9UQUcgPSAndGFnOnlhbWwub3JnLDIwMDI6c3RyJworICAgIERFRkFVTFRfU0VRVUVOQ0VfVEFHID0gJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScKKyAgICBERUZBVUxUX01BUFBJTkdfVEFHID0gJ3RhZzp5YW1sLm9yZywyMDAyOm1hcCcKKworICAgIHlhbWxfaW1wbGljaXRfcmVzb2x2ZXJzID0ge30KKyAgICB5YW1sX3BhdGhfcmVzb2x2ZXJzID0ge30KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXNvbHZlcl9leGFjdF9wYXRocyA9IFtdCisgICAgICAgIHNlbGYucmVzb2x2ZXJfcHJlZml4X3BhdGhzID0gW10KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhZGRfaW1wbGljaXRfcmVzb2x2ZXIoY2xzLCB0YWcsIHJlZ2V4cCwgZmlyc3QpOgorICAgICAgICBpZiBub3QgJ3lhbWxfaW1wbGljaXRfcmVzb2x2ZXJzJyBpbiBjbHMuX19kaWN0X186CisgICAgICAgICAgICBpbXBsaWNpdF9yZXNvbHZlcnMgPSB7fQorICAgICAgICAgICAgZm9yIGtleSBpbiBjbHMueWFtbF9pbXBsaWNpdF9yZXNvbHZlcnM6CisgICAgICAgICAgICAgICAgaW1wbGljaXRfcmVzb2x2ZXJzW2tleV0gPSBjbHMueWFtbF9pbXBsaWNpdF9yZXNvbHZlcnNba2V5XVs6XQorICAgICAgICAgICAgY2xzLnlhbWxfaW1wbGljaXRfcmVzb2x2ZXJzID0gaW1wbGljaXRfcmVzb2x2ZXJzCisgICAgICAgIGlmIGZpcnN0IGlzIE5vbmU6CisgICAgICAgICAgICBmaXJzdCA9IFtOb25lXQorICAgICAgICBmb3IgY2ggaW4gZmlyc3Q6CisgICAgICAgICAgICBjbHMueWFtbF9pbXBsaWNpdF9yZXNvbHZlcnMuc2V0ZGVmYXVsdChjaCwgW10pLmFwcGVuZCgodGFnLCByZWdleHApKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFkZF9wYXRoX3Jlc29sdmVyKGNscywgdGFnLCBwYXRoLCBraW5kPU5vbmUpOgorICAgICAgICAjIE5vdGU6IGBhZGRfcGF0aF9yZXNvbHZlcmAgaXMgZXhwZXJpbWVudGFsLiAgVGhlIEFQSSBjb3VsZCBiZSBjaGFuZ2VkLgorICAgICAgICAjIGBuZXdfcGF0aGAgaXMgYSBwYXR0ZXJuIHRoYXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBwYXRoIGZyb20gdGhlCisgICAgICAgICMgcm9vdCB0byB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGNvbnNpZGVyZWQuICBgbm9kZV9wYXRoYCBlbGVtZW50cyBhcmUKKyAgICAgICAgIyB0dXBsZXMgYChub2RlX2NoZWNrLCBpbmRleF9jaGVjaylgLiAgYG5vZGVfY2hlY2tgIGlzIGEgbm9kZSBjbGFzczoKKyAgICAgICAgIyBgU2NhbGFyTm9kZWAsIGBTZXF1ZW5jZU5vZGVgLCBgTWFwcGluZ05vZGVgIG9yIGBOb25lYC4gIGBOb25lYAorICAgICAgICAjIG1hdGNoZXMgYW55IGtpbmQgb2YgYSBub2RlLiAgYGluZGV4X2NoZWNrYCBjb3VsZCBiZSBgTm9uZWAsIGEgYm9vbGVhbgorICAgICAgICAjIHZhbHVlLCBhIHN0cmluZyB2YWx1ZSwgb3IgYSBudW1iZXIuICBgTm9uZWAgYW5kIGBGYWxzZWAgbWF0Y2ggYWdhaW5zdAorICAgICAgICAjIGFueSBfdmFsdWVfIG9mIHNlcXVlbmNlIGFuZCBtYXBwaW5nIG5vZGVzLiAgYFRydWVgIG1hdGNoZXMgYWdhaW5zdAorICAgICAgICAjIGFueSBfa2V5XyBvZiBhIG1hcHBpbmcgbm9kZS4gIEEgc3RyaW5nIGBpbmRleF9jaGVja2AgbWF0Y2hlcyBhZ2FpbnN0CisgICAgICAgICMgYSBtYXBwaW5nIHZhbHVlIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBzY2FsYXIga2V5IHdoaWNoIGNvbnRlbnQgaXMKKyAgICAgICAgIyBlcXVhbCB0byB0aGUgYGluZGV4X2NoZWNrYCB2YWx1ZS4gIEFuIGludGVnZXIgYGluZGV4X2NoZWNrYCBtYXRjaGVzCisgICAgICAgICMgYWdhaW5zdCBhIHNlcXVlbmNlIHZhbHVlIHdpdGggdGhlIGluZGV4IGVxdWFsIHRvIGBpbmRleF9jaGVja2AuCisgICAgICAgIGlmIG5vdCAneWFtbF9wYXRoX3Jlc29sdmVycycgaW4gY2xzLl9fZGljdF9fOgorICAgICAgICAgICAgY2xzLnlhbWxfcGF0aF9yZXNvbHZlcnMgPSBjbHMueWFtbF9wYXRoX3Jlc29sdmVycy5jb3B5KCkKKyAgICAgICAgbmV3X3BhdGggPSBbXQorICAgICAgICBmb3IgZWxlbWVudCBpbiBwYXRoOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oZWxlbWVudCkgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgbm9kZV9jaGVjaywgaW5kZXhfY2hlY2sgPSBlbGVtZW50CisgICAgICAgICAgICAgICAgZWxpZiBsZW4oZWxlbWVudCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgbm9kZV9jaGVjayA9IGVsZW1lbnRbMF0KKyAgICAgICAgICAgICAgICAgICAgaW5kZXhfY2hlY2sgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVzb2x2ZXJFcnJvcigiSW52YWxpZCBwYXRoIGVsZW1lbnQ6ICVzIiAlIGVsZW1lbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5vZGVfY2hlY2sgPSBOb25lCisgICAgICAgICAgICAgICAgaW5kZXhfY2hlY2sgPSBlbGVtZW50CisgICAgICAgICAgICBpZiBub2RlX2NoZWNrIGlzIHN0cjoKKyAgICAgICAgICAgICAgICBub2RlX2NoZWNrID0gU2NhbGFyTm9kZQorICAgICAgICAgICAgZWxpZiBub2RlX2NoZWNrIGlzIGxpc3Q6CisgICAgICAgICAgICAgICAgbm9kZV9jaGVjayA9IFNlcXVlbmNlTm9kZQorICAgICAgICAgICAgZWxpZiBub2RlX2NoZWNrIGlzIGRpY3Q6CisgICAgICAgICAgICAgICAgbm9kZV9jaGVjayA9IE1hcHBpbmdOb2RlCisgICAgICAgICAgICBlbGlmIG5vZGVfY2hlY2sgbm90IGluIFtTY2FsYXJOb2RlLCBTZXF1ZW5jZU5vZGUsIE1hcHBpbmdOb2RlXSAgXAorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2Uobm9kZV9jaGVjaywgc3RyKSBcCisgICAgICAgICAgICAgICAgICAgIGFuZCBub2RlX2NoZWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFJlc29sdmVyRXJyb3IoIkludmFsaWQgbm9kZSBjaGVja2VyOiAlcyIgJSBub2RlX2NoZWNrKQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5kZXhfY2hlY2ssIChzdHIsIGludCkpICBcCisgICAgICAgICAgICAgICAgICAgIGFuZCBpbmRleF9jaGVjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBSZXNvbHZlckVycm9yKCJJbnZhbGlkIGluZGV4IGNoZWNrZXI6ICVzIiAlIGluZGV4X2NoZWNrKQorICAgICAgICAgICAgbmV3X3BhdGguYXBwZW5kKChub2RlX2NoZWNrLCBpbmRleF9jaGVjaykpCisgICAgICAgIGlmIGtpbmQgaXMgc3RyOgorICAgICAgICAgICAga2luZCA9IFNjYWxhck5vZGUKKyAgICAgICAgZWxpZiBraW5kIGlzIGxpc3Q6CisgICAgICAgICAgICBraW5kID0gU2VxdWVuY2VOb2RlCisgICAgICAgIGVsaWYga2luZCBpcyBkaWN0OgorICAgICAgICAgICAga2luZCA9IE1hcHBpbmdOb2RlCisgICAgICAgIGVsaWYga2luZCBub3QgaW4gW1NjYWxhck5vZGUsIFNlcXVlbmNlTm9kZSwgTWFwcGluZ05vZGVdICAgIFwKKyAgICAgICAgICAgICAgICBhbmQga2luZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJlc29sdmVyRXJyb3IoIkludmFsaWQgbm9kZSBraW5kOiAlcyIgJSBraW5kKQorICAgICAgICBjbHMueWFtbF9wYXRoX3Jlc29sdmVyc1t0dXBsZShuZXdfcGF0aCksIGtpbmRdID0gdGFnCisKKyAgICBkZWYgZGVzY2VuZF9yZXNvbHZlcihzZWxmLCBjdXJyZW50X25vZGUsIGN1cnJlbnRfaW5kZXgpOgorICAgICAgICBpZiBub3Qgc2VsZi55YW1sX3BhdGhfcmVzb2x2ZXJzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4YWN0X3BhdGhzID0ge30KKyAgICAgICAgcHJlZml4X3BhdGhzID0gW10KKyAgICAgICAgaWYgY3VycmVudF9ub2RlOgorICAgICAgICAgICAgZGVwdGggPSBsZW4oc2VsZi5yZXNvbHZlcl9wcmVmaXhfcGF0aHMpCisgICAgICAgICAgICBmb3IgcGF0aCwga2luZCBpbiBzZWxmLnJlc29sdmVyX3ByZWZpeF9wYXRoc1stMV06CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jaGVja19yZXNvbHZlcl9wcmVmaXgoZGVwdGgsIHBhdGgsIGtpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X25vZGUsIGN1cnJlbnRfaW5kZXgpOgorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aCkgPiBkZXB0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9wYXRocy5hcHBlbmQoKHBhdGgsIGtpbmQpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3RfcGF0aHNba2luZF0gPSBzZWxmLnlhbWxfcGF0aF9yZXNvbHZlcnNbcGF0aCwga2luZF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBwYXRoLCBraW5kIGluIHNlbGYueWFtbF9wYXRoX3Jlc29sdmVyczoKKyAgICAgICAgICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgZXhhY3RfcGF0aHNba2luZF0gPSBzZWxmLnlhbWxfcGF0aF9yZXNvbHZlcnNbcGF0aCwga2luZF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmVmaXhfcGF0aHMuYXBwZW5kKChwYXRoLCBraW5kKSkKKyAgICAgICAgc2VsZi5yZXNvbHZlcl9leGFjdF9wYXRocy5hcHBlbmQoZXhhY3RfcGF0aHMpCisgICAgICAgIHNlbGYucmVzb2x2ZXJfcHJlZml4X3BhdGhzLmFwcGVuZChwcmVmaXhfcGF0aHMpCisKKyAgICBkZWYgYXNjZW5kX3Jlc29sdmVyKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi55YW1sX3BhdGhfcmVzb2x2ZXJzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYucmVzb2x2ZXJfZXhhY3RfcGF0aHMucG9wKCkKKyAgICAgICAgc2VsZi5yZXNvbHZlcl9wcmVmaXhfcGF0aHMucG9wKCkKKworICAgIGRlZiBjaGVja19yZXNvbHZlcl9wcmVmaXgoc2VsZiwgZGVwdGgsIHBhdGgsIGtpbmQsCisgICAgICAgICAgICBjdXJyZW50X25vZGUsIGN1cnJlbnRfaW5kZXgpOgorICAgICAgICBub2RlX2NoZWNrLCBpbmRleF9jaGVjayA9IHBhdGhbZGVwdGgtMV0KKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlX2NoZWNrLCBzdHIpOgorICAgICAgICAgICAgaWYgY3VycmVudF9ub2RlLnRhZyAhPSBub2RlX2NoZWNrOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIG5vZGVfY2hlY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjdXJyZW50X25vZGUsIG5vZGVfY2hlY2spOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBpbmRleF9jaGVjayBpcyBUcnVlIGFuZCBjdXJyZW50X2luZGV4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIChpbmRleF9jaGVjayBpcyBGYWxzZSBvciBpbmRleF9jaGVjayBpcyBOb25lKSAgICBcCisgICAgICAgICAgICAgICAgYW5kIGN1cnJlbnRfaW5kZXggaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBpc2luc3RhbmNlKGluZGV4X2NoZWNrLCBzdHIpOgorICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKGN1cnJlbnRfaW5kZXgsIFNjYWxhck5vZGUpCisgICAgICAgICAgICAgICAgICAgIGFuZCBpbmRleF9jaGVjayA9PSBjdXJyZW50X2luZGV4LnZhbHVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGluZGV4X2NoZWNrLCBpbnQpIGFuZCBub3QgaXNpbnN0YW5jZShpbmRleF9jaGVjaywgYm9vbCk6CisgICAgICAgICAgICBpZiBpbmRleF9jaGVjayAhPSBjdXJyZW50X2luZGV4OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlc29sdmUoc2VsZiwga2luZCwgdmFsdWUsIGltcGxpY2l0KToKKyAgICAgICAgaWYga2luZCBpcyBTY2FsYXJOb2RlIGFuZCBpbXBsaWNpdFswXToKKyAgICAgICAgICAgIGlmIHZhbHVlID09ICcnOgorICAgICAgICAgICAgICAgIHJlc29sdmVycyA9IHNlbGYueWFtbF9pbXBsaWNpdF9yZXNvbHZlcnMuZ2V0KCcnLCBbXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzb2x2ZXJzID0gc2VsZi55YW1sX2ltcGxpY2l0X3Jlc29sdmVycy5nZXQodmFsdWVbMF0sIFtdKQorICAgICAgICAgICAgd2lsZGNhcmRfcmVzb2x2ZXJzID0gc2VsZi55YW1sX2ltcGxpY2l0X3Jlc29sdmVycy5nZXQoTm9uZSwgW10pCisgICAgICAgICAgICBmb3IgdGFnLCByZWdleHAgaW4gcmVzb2x2ZXJzICsgd2lsZGNhcmRfcmVzb2x2ZXJzOgorICAgICAgICAgICAgICAgIGlmIHJlZ2V4cC5tYXRjaCh2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWcKKyAgICAgICAgICAgIGltcGxpY2l0ID0gaW1wbGljaXRbMV0KKyAgICAgICAgaWYgc2VsZi55YW1sX3BhdGhfcmVzb2x2ZXJzOgorICAgICAgICAgICAgZXhhY3RfcGF0aHMgPSBzZWxmLnJlc29sdmVyX2V4YWN0X3BhdGhzWy0xXQorICAgICAgICAgICAgaWYga2luZCBpbiBleGFjdF9wYXRoczoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhhY3RfcGF0aHNba2luZF0KKyAgICAgICAgICAgIGlmIE5vbmUgaW4gZXhhY3RfcGF0aHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4YWN0X3BhdGhzW05vbmVdCisgICAgICAgIGlmIGtpbmQgaXMgU2NhbGFyTm9kZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLkRFRkFVTFRfU0NBTEFSX1RBRworICAgICAgICBlbGlmIGtpbmQgaXMgU2VxdWVuY2VOb2RlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuREVGQVVMVF9TRVFVRU5DRV9UQUcKKyAgICAgICAgZWxpZiBraW5kIGlzIE1hcHBpbmdOb2RlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuREVGQVVMVF9NQVBQSU5HX1RBRworCitjbGFzcyBSZXNvbHZlcihCYXNlUmVzb2x2ZXIpOgorICAgIHBhc3MKKworUmVzb2x2ZXIuYWRkX2ltcGxpY2l0X3Jlc29sdmVyKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsCisgICAgICAgIHJlLmNvbXBpbGUocicnJ14oPzp5ZXN8WWVzfFlFU3xub3xOb3xOTworICAgICAgICAgICAgICAgICAgICB8dHJ1ZXxUcnVlfFRSVUV8ZmFsc2V8RmFsc2V8RkFMU0UKKyAgICAgICAgICAgICAgICAgICAgfG9ufE9ufE9OfG9mZnxPZmZ8T0ZGKSQnJycsIHJlLlgpLAorICAgICAgICBsaXN0KCd5WW5OdFRmRm9PJykpCisKK1Jlc29sdmVyLmFkZF9pbXBsaWNpdF9yZXNvbHZlcigKKyAgICAgICAgJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JywKKyAgICAgICAgcmUuY29tcGlsZShyJycnXig/OlstK10/KD86WzAtOV1bMC05X10qKVwuWzAtOV9dKig/OltlRV1bLStdWzAtOV0rKT8KKyAgICAgICAgICAgICAgICAgICAgfFwuWzAtOV1bMC05X10qKD86W2VFXVstK11bMC05XSspPworICAgICAgICAgICAgICAgICAgICB8Wy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1wuWzAtOV9dKgorICAgICAgICAgICAgICAgICAgICB8Wy0rXT9cLig/OmluZnxJbmZ8SU5GKQorICAgICAgICAgICAgICAgICAgICB8XC4oPzpuYW58TmFOfE5BTikpJCcnJywgcmUuWCksCisgICAgICAgIGxpc3QoJy0rMDEyMzQ1Njc4OS4nKSkKKworUmVzb2x2ZXIuYWRkX2ltcGxpY2l0X3Jlc29sdmVyKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6aW50JywKKyAgICAgICAgcmUuY29tcGlsZShyJycnXig/OlstK10/MGJbMC0xX10rCisgICAgICAgICAgICAgICAgICAgIHxbLStdPzBbMC03X10rCisgICAgICAgICAgICAgICAgICAgIHxbLStdPyg/OjB8WzEtOV1bMC05X10qKQorICAgICAgICAgICAgICAgICAgICB8Wy0rXT8weFswLTlhLWZBLUZfXSsKKyAgICAgICAgICAgICAgICAgICAgfFstK10/WzEtOV1bMC05X10qKD86OlswLTVdP1swLTldKSspJCcnJywgcmUuWCksCisgICAgICAgIGxpc3QoJy0rMDEyMzQ1Njc4OScpKQorCitSZXNvbHZlci5hZGRfaW1wbGljaXRfcmVzb2x2ZXIoCisgICAgICAgICd0YWc6eWFtbC5vcmcsMjAwMjptZXJnZScsCisgICAgICAgIHJlLmNvbXBpbGUocideKD86PDwpJCcpLAorICAgICAgICBbJzwnXSkKKworUmVzb2x2ZXIuYWRkX2ltcGxpY2l0X3Jlc29sdmVyKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6bnVsbCcsCisgICAgICAgIHJlLmNvbXBpbGUocicnJ14oPzogfgorICAgICAgICAgICAgICAgICAgICB8bnVsbHxOdWxsfE5VTEwKKyAgICAgICAgICAgICAgICAgICAgfCApJCcnJywgcmUuWCksCisgICAgICAgIFsnficsICduJywgJ04nLCAnJ10pCisKK1Jlc29sdmVyLmFkZF9pbXBsaWNpdF9yZXNvbHZlcigKKyAgICAgICAgJ3RhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCcsCisgICAgICAgIHJlLmNvbXBpbGUocicnJ14oPzpbMC05XVswLTldWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0KKyAgICAgICAgICAgICAgICAgICAgfFswLTldWzAtOV1bMC05XVswLTldIC1bMC05XVswLTldPyAtWzAtOV1bMC05XT8KKyAgICAgICAgICAgICAgICAgICAgICg/OltUdF18WyBcdF0rKVswLTldWzAtOV0/CisgICAgICAgICAgICAgICAgICAgICA6WzAtOV1bMC05XSA6WzAtOV1bMC05XSAoPzpcLlswLTldKik/CisgICAgICAgICAgICAgICAgICAgICAoPzpbIFx0XSooPzpafFstK11bMC05XVswLTldPyg/OjpbMC05XVswLTldKT8pKT8pJCcnJywgcmUuWCksCisgICAgICAgIGxpc3QoJzAxMjM0NTY3ODknKSkKKworUmVzb2x2ZXIuYWRkX2ltcGxpY2l0X3Jlc29sdmVyKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6dmFsdWUnLAorICAgICAgICByZS5jb21waWxlKHInXig/Oj0pJCcpLAorICAgICAgICBbJz0nXSkKKworIyBUaGUgZm9sbG93aW5nIHJlc29sdmVyIGlzIG9ubHkgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMuIEl0IGNhbm5vdCB3b3JrCisjIGJlY2F1c2UgcGxhaW4gc2NhbGFycyBjYW5ub3Qgc3RhcnQgd2l0aCAnIScsICcmJywgb3IgJyonLgorUmVzb2x2ZXIuYWRkX2ltcGxpY2l0X3Jlc29sdmVyKAorICAgICAgICAndGFnOnlhbWwub3JnLDIwMDI6eWFtbCcsCisgICAgICAgIHJlLmNvbXBpbGUocideKD86IXwmfFwqKSQnKSwKKyAgICAgICAgbGlzdCgnISYqJykpCisKZGlmZiAtLWdpdCBhL2xpYi95YW1sL3NjYW5uZXIucHkgYi9saWIveWFtbC9zY2FubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOTI1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveWFtbC9zY2FubmVyLnB5CkBAIC0wLDAgKzEsMTQzNSBAQAorCisjIFNjYW5uZXIgcHJvZHVjZXMgdG9rZW5zIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXM6CisjIFNUUkVBTS1TVEFSVAorIyBTVFJFQU0tRU5ECisjIERJUkVDVElWRShuYW1lLCB2YWx1ZSkKKyMgRE9DVU1FTlQtU1RBUlQKKyMgRE9DVU1FTlQtRU5ECisjIEJMT0NLLVNFUVVFTkNFLVNUQVJUCisjIEJMT0NLLU1BUFBJTkctU1RBUlQKKyMgQkxPQ0stRU5ECisjIEZMT1ctU0VRVUVOQ0UtU1RBUlQKKyMgRkxPVy1NQVBQSU5HLVNUQVJUCisjIEZMT1ctU0VRVUVOQ0UtRU5ECisjIEZMT1ctTUFQUElORy1FTkQKKyMgQkxPQ0stRU5UUlkKKyMgRkxPVy1FTlRSWQorIyBLRVkKKyMgVkFMVUUKKyMgQUxJQVModmFsdWUpCisjIEFOQ0hPUih2YWx1ZSkKKyMgVEFHKHZhbHVlKQorIyBTQ0FMQVIodmFsdWUsIHBsYWluLCBzdHlsZSkKKyMKKyMgUmVhZCBjb21tZW50cyBpbiB0aGUgU2Nhbm5lciBjb2RlIGZvciBtb3JlIGRldGFpbHMuCisjCisKK19fYWxsX18gPSBbJ1NjYW5uZXInLCAnU2Nhbm5lckVycm9yJ10KKworZnJvbSAuZXJyb3IgaW1wb3J0IE1hcmtlZFlBTUxFcnJvcgorZnJvbSAudG9rZW5zIGltcG9ydCAqCisKK2NsYXNzIFNjYW5uZXJFcnJvcihNYXJrZWRZQU1MRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgU2ltcGxlS2V5OgorICAgICMgU2VlIGJlbG93IHNpbXBsZSBrZXlzIHRyZWF0bWVudC4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b2tlbl9udW1iZXIsIHJlcXVpcmVkLCBpbmRleCwgbGluZSwgY29sdW1uLCBtYXJrKToKKyAgICAgICAgc2VsZi50b2tlbl9udW1iZXIgPSB0b2tlbl9udW1iZXIKKyAgICAgICAgc2VsZi5yZXF1aXJlZCA9IHJlcXVpcmVkCisgICAgICAgIHNlbGYuaW5kZXggPSBpbmRleAorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCisgICAgICAgIHNlbGYuY29sdW1uID0gY29sdW1uCisgICAgICAgIHNlbGYubWFyayA9IG1hcmsKKworY2xhc3MgU2Nhbm5lcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgc2Nhbm5lci4iIiIKKyAgICAgICAgIyBJdCBpcyBhc3N1bWVkIHRoYXQgU2Nhbm5lciBhbmQgUmVhZGVyIHdpbGwgaGF2ZSBhIGNvbW1vbiBkZXNjZW5kYW50LgorICAgICAgICAjIFJlYWRlciBkbyB0aGUgZGlydHkgd29yayBvZiBjaGVja2luZyBmb3IgQk9NIGFuZCBjb252ZXJ0aW5nIHRoZQorICAgICAgICAjIGlucHV0IGRhdGEgdG8gVW5pY29kZS4gSXQgYWxzbyBhZGRzIE5VTCB0byB0aGUgZW5kLgorICAgICAgICAjCisgICAgICAgICMgUmVhZGVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcworICAgICAgICAjICAgc2VsZi5wZWVrKGk9MCkgICAgICAgIyBwZWVrIHRoZSBuZXh0IGktdGggY2hhcmFjdGVyCisgICAgICAgICMgICBzZWxmLnByZWZpeChsPTEpICAgICAjIHBlZWsgdGhlIG5leHQgbCBjaGFyYWN0ZXJzCisgICAgICAgICMgICBzZWxmLmZvcndhcmQobD0xKSAgICAjIHJlYWQgdGhlIG5leHQgbCBjaGFyYWN0ZXJzIGFuZCBtb3ZlIHRoZSBwb2ludGVyLgorCisgICAgICAgICMgSGFkIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtPworICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQorCisgICAgICAgICMgVGhlIG51bWJlciBvZiB1bmNsb3NlZCAneycgYW5kICdbJy4gYGZsb3dfbGV2ZWwgPT0gMGAgbWVhbnMgYmxvY2sKKyAgICAgICAgIyBjb250ZXh0LgorICAgICAgICBzZWxmLmZsb3dfbGV2ZWwgPSAwCisKKyAgICAgICAgIyBMaXN0IG9mIHByb2Nlc3NlZCB0b2tlbnMgdGhhdCBhcmUgbm90IHlldCBlbWl0dGVkLgorICAgICAgICBzZWxmLnRva2VucyA9IFtdCisKKyAgICAgICAgIyBBZGQgdGhlIFNUUkVBTS1TVEFSVCB0b2tlbi4KKyAgICAgICAgc2VsZi5mZXRjaF9zdHJlYW1fc3RhcnQoKQorCisgICAgICAgICMgTnVtYmVyIG9mIHRva2VucyB0aGF0IHdlcmUgZW1pdHRlZCB0aHJvdWdoIHRoZSBgZ2V0X3Rva2VuYCBtZXRob2QuCisgICAgICAgIHNlbGYudG9rZW5zX3Rha2VuID0gMAorCisgICAgICAgICMgVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwuCisgICAgICAgIHNlbGYuaW5kZW50ID0gLTEKKworICAgICAgICAjIFBhc3QgaW5kZW50YXRpb24gbGV2ZWxzLgorICAgICAgICBzZWxmLmluZGVudHMgPSBbXQorCisgICAgICAgICMgVmFyaWFibGVzIHJlbGF0ZWQgdG8gc2ltcGxlIGtleXMgdHJlYXRtZW50LgorCisgICAgICAgICMgQSBzaW1wbGUga2V5IGlzIGEga2V5IHRoYXQgaXMgbm90IGRlbm90ZWQgYnkgdGhlICc/JyBpbmRpY2F0b3IuCisgICAgICAgICMgRXhhbXBsZSBvZiBzaW1wbGUga2V5czoKKyAgICAgICAgIyAgIC0tLQorICAgICAgICAjICAgYmxvY2sgc2ltcGxlIGtleTogdmFsdWUKKyAgICAgICAgIyAgID8gbm90IGEgc2ltcGxlIGtleToKKyAgICAgICAgIyAgIDogeyBmbG93IHNpbXBsZSBrZXk6IHZhbHVlIH0KKyAgICAgICAgIyBXZSBlbWl0IHRoZSBLRVkgdG9rZW4gYmVmb3JlIGFsbCBrZXlzLCBzbyB3aGVuIHdlIGZpbmQgYSBwb3RlbnRpYWwKKyAgICAgICAgIyBzaW1wbGUga2V5LCB3ZSB0cnkgdG8gbG9jYXRlIHRoZSBjb3JyZXNwb25kaW5nICc6JyBpbmRpY2F0b3IuCisgICAgICAgICMgU2ltcGxlIGtleXMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gYSBzaW5nbGUgbGluZSBhbmQgMTAyNCBjaGFyYWN0ZXJzLgorCisgICAgICAgICMgQ2FuIGEgc2ltcGxlIGtleSBzdGFydCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbj8gQSBzaW1wbGUga2V5IG1heQorICAgICAgICAjIHN0YXJ0OgorICAgICAgICAjIC0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSwgbm90IGNvdW50aW5nIGluZGVudGF0aW9uIHNwYWNlcworICAgICAgICAjICAgICAgIChpbiBibG9jayBjb250ZXh0KSwKKyAgICAgICAgIyAtIGFmdGVyICd7JywgJ1snLCAnLCcgKGluIHRoZSBmbG93IGNvbnRleHQpLAorICAgICAgICAjIC0gYWZ0ZXIgJz8nLCAnOicsICctJyAoaW4gdGhlIGJsb2NrIGNvbnRleHQpLgorICAgICAgICAjIEluIHRoZSBibG9jayBjb250ZXh0LCB0aGlzIGZsYWcgYWxzbyBzaWduaWZpZXMgaWYgYSBibG9jayBjb2xsZWN0aW9uCisgICAgICAgICMgbWF5IHN0YXJ0IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICBzZWxmLmFsbG93X3NpbXBsZV9rZXkgPSBUcnVlCisKKyAgICAgICAgIyBLZWVwIHRyYWNrIG9mIHBvc3NpYmxlIHNpbXBsZSBrZXlzLiBUaGlzIGlzIGEgZGljdGlvbmFyeS4gVGhlIGtleQorICAgICAgICAjIGlzIGBmbG93X2xldmVsYDsgdGhlcmUgY2FuIGJlIG5vIG1vcmUgdGhhdCBvbmUgcG9zc2libGUgc2ltcGxlIGtleQorICAgICAgICAjIGZvciBlYWNoIGxldmVsLiBUaGUgdmFsdWUgaXMgYSBTaW1wbGVLZXkgcmVjb3JkOgorICAgICAgICAjICAgKHRva2VuX251bWJlciwgcmVxdWlyZWQsIGluZGV4LCBsaW5lLCBjb2x1bW4sIG1hcmspCisgICAgICAgICMgQSBzaW1wbGUga2V5IG1heSBzdGFydCB3aXRoIEFMSUFTLCBBTkNIT1IsIFRBRywgU0NBTEFSKGZsb3cpLAorICAgICAgICAjICdbJywgb3IgJ3snIHRva2Vucy4KKyAgICAgICAgc2VsZi5wb3NzaWJsZV9zaW1wbGVfa2V5cyA9IHt9CisKKyAgICAjIFB1YmxpYyBtZXRob2RzLgorCisgICAgZGVmIGNoZWNrX3Rva2VuKHNlbGYsICpjaG9pY2VzKToKKyAgICAgICAgIyBDaGVjayBpZiB0aGUgbmV4dCB0b2tlbiBpcyBvbmUgb2YgdGhlIGdpdmVuIHR5cGVzLgorICAgICAgICB3aGlsZSBzZWxmLm5lZWRfbW9yZV90b2tlbnMoKToKKyAgICAgICAgICAgIHNlbGYuZmV0Y2hfbW9yZV90b2tlbnMoKQorICAgICAgICBpZiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIGlmIG5vdCBjaG9pY2VzOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBmb3IgY2hvaWNlIGluIGNob2ljZXM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnRva2Vuc1swXSwgY2hvaWNlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcGVla190b2tlbihzZWxmKToKKyAgICAgICAgIyBSZXR1cm4gdGhlIG5leHQgdG9rZW4sIGJ1dCBkbyBub3QgZGVsZXRlIGlmIGZyb20gdGhlIHF1ZXVlLgorICAgICAgICAjIFJldHVybiBOb25lIGlmIG5vIG1vcmUgdG9rZW5zLgorICAgICAgICB3aGlsZSBzZWxmLm5lZWRfbW9yZV90b2tlbnMoKToKKyAgICAgICAgICAgIHNlbGYuZmV0Y2hfbW9yZV90b2tlbnMoKQorICAgICAgICBpZiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRva2Vuc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfdG9rZW4oc2VsZik6CisgICAgICAgICMgUmV0dXJuIHRoZSBuZXh0IHRva2VuLgorICAgICAgICB3aGlsZSBzZWxmLm5lZWRfbW9yZV90b2tlbnMoKToKKyAgICAgICAgICAgIHNlbGYuZmV0Y2hfbW9yZV90b2tlbnMoKQorICAgICAgICBpZiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIHNlbGYudG9rZW5zX3Rha2VuICs9IDEKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRva2Vucy5wb3AoMCkKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIG5lZWRfbW9yZV90b2tlbnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgc2VsZi50b2tlbnM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIFRoZSBjdXJyZW50IHRva2VuIG1heSBiZSBhIHBvdGVudGlhbCBzaW1wbGUga2V5LCBzbyB3ZQorICAgICAgICAjIG5lZWQgdG8gbG9vayBmdXJ0aGVyLgorICAgICAgICBzZWxmLnN0YWxlX3Bvc3NpYmxlX3NpbXBsZV9rZXlzKCkKKyAgICAgICAgaWYgc2VsZi5uZXh0X3Bvc3NpYmxlX3NpbXBsZV9rZXkoKSA9PSBzZWxmLnRva2Vuc190YWtlbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZmV0Y2hfbW9yZV90b2tlbnMoc2VsZik6CisKKyAgICAgICAgIyBFYXQgd2hpdGVzcGFjZXMgYW5kIGNvbW1lbnRzIHVudGlsIHdlIHJlYWNoIHRoZSBuZXh0IHRva2VuLgorICAgICAgICBzZWxmLnNjYW5fdG9fbmV4dF90b2tlbigpCisKKyAgICAgICAgIyBSZW1vdmUgb2Jzb2xldGUgcG9zc2libGUgc2ltcGxlIGtleXMuCisgICAgICAgIHNlbGYuc3RhbGVfcG9zc2libGVfc2ltcGxlX2tleXMoKQorCisgICAgICAgICMgQ29tcGFyZSB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiBhbmQgY29sdW1uLiBJdCBtYXkgYWRkIHNvbWUgdG9rZW5zCisgICAgICAgICMgYW5kIGRlY3JlYXNlIHRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsLgorICAgICAgICBzZWxmLnVud2luZF9pbmRlbnQoc2VsZi5jb2x1bW4pCisKKyAgICAgICAgIyBQZWVrIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgY2ggPSBzZWxmLnBlZWsoKQorCisgICAgICAgICMgSXMgaXQgdGhlIGVuZCBvZiBzdHJlYW0/CisgICAgICAgIGlmIGNoID09ICdcMCc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9zdHJlYW1fZW5kKCkKKworICAgICAgICAjIElzIGl0IGEgZGlyZWN0aXZlPworICAgICAgICBpZiBjaCA9PSAnJScgYW5kIHNlbGYuY2hlY2tfZGlyZWN0aXZlKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9kaXJlY3RpdmUoKQorCisgICAgICAgICMgSXMgaXQgdGhlIGRvY3VtZW50IHN0YXJ0PworICAgICAgICBpZiBjaCA9PSAnLScgYW5kIHNlbGYuY2hlY2tfZG9jdW1lbnRfc3RhcnQoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZldGNoX2RvY3VtZW50X3N0YXJ0KCkKKworICAgICAgICAjIElzIGl0IHRoZSBkb2N1bWVudCBlbmQ/CisgICAgICAgIGlmIGNoID09ICcuJyBhbmQgc2VsZi5jaGVja19kb2N1bWVudF9lbmQoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZldGNoX2RvY3VtZW50X2VuZCgpCisKKyAgICAgICAgIyBUT0RPOiBzdXBwb3J0IGZvciBCT00gd2l0aGluIGEgc3RyZWFtLgorICAgICAgICAjaWYgY2ggPT0gJ1x1RkVGRic6CisgICAgICAgICMgICAgcmV0dXJuIHNlbGYuZmV0Y2hfYm9tKCkgICAgPC0tIGlzc3VlIEJPTVRva2VuCisKKyAgICAgICAgIyBOb3RlOiB0aGUgb3JkZXIgb2YgdGhlIGZvbGxvd2luZyBjaGVja3MgaXMgTk9UIHNpZ25pZmljYW50LgorCisgICAgICAgICMgSXMgaXQgdGhlIGZsb3cgc2VxdWVuY2Ugc3RhcnQgaW5kaWNhdG9yPworICAgICAgICBpZiBjaCA9PSAnWyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9mbG93X3NlcXVlbmNlX3N0YXJ0KCkKKworICAgICAgICAjIElzIGl0IHRoZSBmbG93IG1hcHBpbmcgc3RhcnQgaW5kaWNhdG9yPworICAgICAgICBpZiBjaCA9PSAneyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9mbG93X21hcHBpbmdfc3RhcnQoKQorCisgICAgICAgICMgSXMgaXQgdGhlIGZsb3cgc2VxdWVuY2UgZW5kIGluZGljYXRvcj8KKyAgICAgICAgaWYgY2ggPT0gJ10nOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmV0Y2hfZmxvd19zZXF1ZW5jZV9lbmQoKQorCisgICAgICAgICMgSXMgaXQgdGhlIGZsb3cgbWFwcGluZyBlbmQgaW5kaWNhdG9yPworICAgICAgICBpZiBjaCA9PSAnfSc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9mbG93X21hcHBpbmdfZW5kKCkKKworICAgICAgICAjIElzIGl0IHRoZSBmbG93IGVudHJ5IGluZGljYXRvcj8KKyAgICAgICAgaWYgY2ggPT0gJywnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmV0Y2hfZmxvd19lbnRyeSgpCisKKyAgICAgICAgIyBJcyBpdCB0aGUgYmxvY2sgZW50cnkgaW5kaWNhdG9yPworICAgICAgICBpZiBjaCA9PSAnLScgYW5kIHNlbGYuY2hlY2tfYmxvY2tfZW50cnkoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZldGNoX2Jsb2NrX2VudHJ5KCkKKworICAgICAgICAjIElzIGl0IHRoZSBrZXkgaW5kaWNhdG9yPworICAgICAgICBpZiBjaCA9PSAnPycgYW5kIHNlbGYuY2hlY2tfa2V5KCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9rZXkoKQorCisgICAgICAgICMgSXMgaXQgdGhlIHZhbHVlIGluZGljYXRvcj8KKyAgICAgICAgaWYgY2ggPT0gJzonIGFuZCBzZWxmLmNoZWNrX3ZhbHVlKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF92YWx1ZSgpCisKKyAgICAgICAgIyBJcyBpdCBhbiBhbGlhcz8KKyAgICAgICAgaWYgY2ggPT0gJyonOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmV0Y2hfYWxpYXMoKQorCisgICAgICAgICMgSXMgaXQgYW4gYW5jaG9yPworICAgICAgICBpZiBjaCA9PSAnJic6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9hbmNob3IoKQorCisgICAgICAgICMgSXMgaXQgYSB0YWc/CisgICAgICAgIGlmIGNoID09ICchJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZldGNoX3RhZygpCisKKyAgICAgICAgIyBJcyBpdCBhIGxpdGVyYWwgc2NhbGFyPworICAgICAgICBpZiBjaCA9PSAnfCcgYW5kIG5vdCBzZWxmLmZsb3dfbGV2ZWw6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9saXRlcmFsKCkKKworICAgICAgICAjIElzIGl0IGEgZm9sZGVkIHNjYWxhcj8KKyAgICAgICAgaWYgY2ggPT0gJz4nIGFuZCBub3Qgc2VsZi5mbG93X2xldmVsOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmV0Y2hfZm9sZGVkKCkKKworICAgICAgICAjIElzIGl0IGEgc2luZ2xlIHF1b3RlZCBzY2FsYXI/CisgICAgICAgIGlmIGNoID09ICdcJyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mZXRjaF9zaW5nbGUoKQorCisgICAgICAgICMgSXMgaXQgYSBkb3VibGUgcXVvdGVkIHNjYWxhcj8KKyAgICAgICAgaWYgY2ggPT0gJ1wiJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZldGNoX2RvdWJsZSgpCisKKyAgICAgICAgIyBJdCBtdXN0IGJlIGEgcGxhaW4gc2NhbGFyIHRoZW4uCisgICAgICAgIGlmIHNlbGYuY2hlY2tfcGxhaW4oKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZldGNoX3BsYWluKCkKKworICAgICAgICAjIE5vPyBJdCdzIGFuIGVycm9yLiBMZXQncyBwcm9kdWNlIGEgbmljZSBlcnJvciBtZXNzYWdlLgorICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGZvciB0aGUgbmV4dCB0b2tlbiIsIE5vbmUsCisgICAgICAgICAgICAgICAgImZvdW5kIGNoYXJhY3RlciAlciB0aGF0IGNhbm5vdCBzdGFydCBhbnkgdG9rZW4iICUgY2gsCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfbWFyaygpKQorCisgICAgIyBTaW1wbGUga2V5cyB0cmVhdG1lbnQuCisKKyAgICBkZWYgbmV4dF9wb3NzaWJsZV9zaW1wbGVfa2V5KHNlbGYpOgorICAgICAgICAjIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHNpbXBsZSBrZXkuIEFjdHVhbGx5IHdlCisgICAgICAgICMgZG9uJ3QgbmVlZCB0byBsb29wIHRocm91Z2ggdGhlIHdob2xlIGRpY3Rpb25hcnkuIFdlIG1heSByZXBsYWNlIGl0CisgICAgICAgICMgd2l0aCB0aGUgZm9sbG93aW5nIGNvZGU6CisgICAgICAgICMgICBpZiBub3Qgc2VsZi5wb3NzaWJsZV9zaW1wbGVfa2V5czoKKyAgICAgICAgIyAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjICAgcmV0dXJuIHNlbGYucG9zc2libGVfc2ltcGxlX2tleXNbCisgICAgICAgICMgICAgICAgICAgIG1pbihzZWxmLnBvc3NpYmxlX3NpbXBsZV9rZXlzLmtleXMoKSldLnRva2VuX251bWJlcgorICAgICAgICBtaW5fdG9rZW5fbnVtYmVyID0gTm9uZQorICAgICAgICBmb3IgbGV2ZWwgaW4gc2VsZi5wb3NzaWJsZV9zaW1wbGVfa2V5czoKKyAgICAgICAgICAgIGtleSA9IHNlbGYucG9zc2libGVfc2ltcGxlX2tleXNbbGV2ZWxdCisgICAgICAgICAgICBpZiBtaW5fdG9rZW5fbnVtYmVyIGlzIE5vbmUgb3Iga2V5LnRva2VuX251bWJlciA8IG1pbl90b2tlbl9udW1iZXI6CisgICAgICAgICAgICAgICAgbWluX3Rva2VuX251bWJlciA9IGtleS50b2tlbl9udW1iZXIKKyAgICAgICAgcmV0dXJuIG1pbl90b2tlbl9udW1iZXIKKworICAgIGRlZiBzdGFsZV9wb3NzaWJsZV9zaW1wbGVfa2V5cyhzZWxmKToKKyAgICAgICAgIyBSZW1vdmUgZW50cmllcyB0aGF0IGFyZSBubyBsb25nZXIgcG9zc2libGUgc2ltcGxlIGtleXMuIEFjY29yZGluZyB0bworICAgICAgICAjIHRoZSBZQU1MIHNwZWNpZmljYXRpb24sIHNpbXBsZSBrZXlzCisgICAgICAgICMgLSBzaG91bGQgYmUgbGltaXRlZCB0byBhIHNpbmdsZSBsaW5lLAorICAgICAgICAjIC0gc2hvdWxkIGJlIG5vIGxvbmdlciB0aGFuIDEwMjQgY2hhcmFjdGVycy4KKyAgICAgICAgIyBEaXNhYmxpbmcgdGhpcyBwcm9jZWR1cmUgd2lsbCBhbGxvdyBzaW1wbGUga2V5cyBvZiBhbnkgbGVuZ3RoIGFuZAorICAgICAgICAjIGhlaWdodCAobWF5IGNhdXNlIHByb2JsZW1zIGlmIGluZGVudGF0aW9uIGlzIGJyb2tlbiB0aG91Z2gpLgorICAgICAgICBmb3IgbGV2ZWwgaW4gbGlzdChzZWxmLnBvc3NpYmxlX3NpbXBsZV9rZXlzKToKKyAgICAgICAgICAgIGtleSA9IHNlbGYucG9zc2libGVfc2ltcGxlX2tleXNbbGV2ZWxdCisgICAgICAgICAgICBpZiBrZXkubGluZSAhPSBzZWxmLmxpbmUgIFwKKyAgICAgICAgICAgICAgICAgICAgb3Igc2VsZi5pbmRleC1rZXkuaW5kZXggPiAxMDI0OgorICAgICAgICAgICAgICAgIGlmIGtleS5yZXF1aXJlZDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIHNpbXBsZSBrZXkiLCBrZXkubWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGZpbmQgZXhwZWN0ZWQgJzonIiwgc2VsZi5nZXRfbWFyaygpKQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnBvc3NpYmxlX3NpbXBsZV9rZXlzW2xldmVsXQorCisgICAgZGVmIHNhdmVfcG9zc2libGVfc2ltcGxlX2tleShzZWxmKToKKyAgICAgICAgIyBUaGUgbmV4dCB0b2tlbiBtYXkgc3RhcnQgYSBzaW1wbGUga2V5LiBXZSBjaGVjayBpZiBpdCdzIHBvc3NpYmxlCisgICAgICAgICMgYW5kIHNhdmUgaXRzIHBvc2l0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IKKyAgICAgICAgIyAgIEFMSUFTLCBBTkNIT1IsIFRBRywgU0NBTEFSKGZsb3cpLCAnWycsIGFuZCAneycuCisKKyAgICAgICAgIyBDaGVjayBpZiBhIHNpbXBsZSBrZXkgaXMgcmVxdWlyZWQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgIHJlcXVpcmVkID0gbm90IHNlbGYuZmxvd19sZXZlbCBhbmQgc2VsZi5pbmRlbnQgPT0gc2VsZi5jb2x1bW4KKworICAgICAgICAjIFRoZSBuZXh0IHRva2VuIG1pZ2h0IGJlIGEgc2ltcGxlIGtleS4gTGV0J3Mgc2F2ZSBpdCdzIG51bWJlciBhbmQKKyAgICAgICAgIyBwb3NpdGlvbi4KKyAgICAgICAgaWYgc2VsZi5hbGxvd19zaW1wbGVfa2V5OgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSgpCisgICAgICAgICAgICB0b2tlbl9udW1iZXIgPSBzZWxmLnRva2Vuc190YWtlbitsZW4oc2VsZi50b2tlbnMpCisgICAgICAgICAgICBrZXkgPSBTaW1wbGVLZXkodG9rZW5fbnVtYmVyLCByZXF1aXJlZCwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleCwgc2VsZi5saW5lLCBzZWxmLmNvbHVtbiwgc2VsZi5nZXRfbWFyaygpKQorICAgICAgICAgICAgc2VsZi5wb3NzaWJsZV9zaW1wbGVfa2V5c1tzZWxmLmZsb3dfbGV2ZWxdID0ga2V5CisKKyAgICBkZWYgcmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoc2VsZik6CisgICAgICAgICMgUmVtb3ZlIHRoZSBzYXZlZCBwb3NzaWJsZSBrZXkgcG9zaXRpb24gYXQgdGhlIGN1cnJlbnQgZmxvdyBsZXZlbC4KKyAgICAgICAgaWYgc2VsZi5mbG93X2xldmVsIGluIHNlbGYucG9zc2libGVfc2ltcGxlX2tleXM6CisgICAgICAgICAgICBrZXkgPSBzZWxmLnBvc3NpYmxlX3NpbXBsZV9rZXlzW3NlbGYuZmxvd19sZXZlbF0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYga2V5LnJlcXVpcmVkOgorICAgICAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBzaW1wbGUga2V5Iiwga2V5Lm1hcmssCisgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGZpbmQgZXhwZWN0ZWQgJzonIiwgc2VsZi5nZXRfbWFyaygpKQorCisgICAgICAgICAgICBkZWwgc2VsZi5wb3NzaWJsZV9zaW1wbGVfa2V5c1tzZWxmLmZsb3dfbGV2ZWxdCisKKyAgICAjIEluZGVudGF0aW9uIGZ1bmN0aW9ucy4KKworICAgIGRlZiB1bndpbmRfaW5kZW50KHNlbGYsIGNvbHVtbik6CisKKyAgICAgICAgIyMgSW4gZmxvdyBjb250ZXh0LCB0b2tlbnMgc2hvdWxkIHJlc3BlY3QgaW5kZW50YXRpb24uCisgICAgICAgICMjIEFjdHVhbGx5IHRoZSBjb25kaXRpb24gc2hvdWxkIGJlIGBzZWxmLmluZGVudCA+PSBjb2x1bW5gIGFjY29yZGluZyB0bworICAgICAgICAjIyB0aGUgc3BlYy4gQnV0IHRoaXMgY29uZGl0aW9uIHdpbGwgcHJvaGliaXQgaW50dWl0aXZlbHkgY29ycmVjdAorICAgICAgICAjIyBjb25zdHJ1Y3Rpb25zIHN1Y2ggYXMKKyAgICAgICAgIyMga2V5IDogeworICAgICAgICAjIyB9CisgICAgICAgICNpZiBzZWxmLmZsb3dfbGV2ZWwgYW5kIHNlbGYuaW5kZW50ID4gY29sdW1uOgorICAgICAgICAjICAgIHJhaXNlIFNjYW5uZXJFcnJvcihOb25lLCBOb25lLAorICAgICAgICAjICAgICAgICAgICAgImludmFsaWQgaW5kZW50YXRpb24gb3IgdW5jbG9zZWQgJ1snIG9yICd7JyIsCisgICAgICAgICMgICAgICAgICAgICBzZWxmLmdldF9tYXJrKCkpCisKKyAgICAgICAgIyBJbiB0aGUgZmxvdyBjb250ZXh0LCBpbmRlbnRhdGlvbiBpcyBpZ25vcmVkLiBXZSBtYWtlIHRoZSBzY2FubmVyIGxlc3MKKyAgICAgICAgIyByZXN0cmljdGl2ZSB0aGVuIHNwZWNpZmljYXRpb24gcmVxdWlyZXMuCisgICAgICAgIGlmIHNlbGYuZmxvd19sZXZlbDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgSW4gYmxvY2sgY29udGV4dCwgd2UgbWF5IG5lZWQgdG8gaXNzdWUgdGhlIEJMT0NLLUVORCB0b2tlbnMuCisgICAgICAgIHdoaWxlIHNlbGYuaW5kZW50ID4gY29sdW1uOgorICAgICAgICAgICAgbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICAgICAgc2VsZi5pbmRlbnQgPSBzZWxmLmluZGVudHMucG9wKCkKKyAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChCbG9ja0VuZFRva2VuKG1hcmssIG1hcmspKQorCisgICAgZGVmIGFkZF9pbmRlbnQoc2VsZiwgY29sdW1uKToKKyAgICAgICAgIyBDaGVjayBpZiB3ZSBuZWVkIHRvIGluY3JlYXNlIGluZGVudGF0aW9uLgorICAgICAgICBpZiBzZWxmLmluZGVudCA8IGNvbHVtbjoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoc2VsZi5pbmRlbnQpCisgICAgICAgICAgICBzZWxmLmluZGVudCA9IGNvbHVtbgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIEZldGNoZXJzLgorCisgICAgZGVmIGZldGNoX3N0cmVhbV9zdGFydChzZWxmKToKKyAgICAgICAgIyBXZSBhbHdheXMgYWRkIFNUUkVBTS1TVEFSVCBhcyB0aGUgZmlyc3QgdG9rZW4gYW5kIFNUUkVBTS1FTkQgYXMgdGhlCisgICAgICAgICMgbGFzdCB0b2tlbi4KKworICAgICAgICAjIFJlYWQgdGhlIHRva2VuLgorICAgICAgICBtYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIAorICAgICAgICAjIEFkZCBTVFJFQU0tU1RBUlQuCisgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChTdHJlYW1TdGFydFRva2VuKG1hcmssIG1hcmssCisgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nKSkKKyAgICAgICAgCisKKyAgICBkZWYgZmV0Y2hfc3RyZWFtX2VuZChzZWxmKToKKworICAgICAgICAjIFNldCB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiB0byAtMS4KKyAgICAgICAgc2VsZi51bndpbmRfaW5kZW50KC0xKQorCisgICAgICAgICMgUmVzZXQgc2ltcGxlIGtleXMuCisgICAgICAgIHNlbGYucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKQorICAgICAgICBzZWxmLmFsbG93X3NpbXBsZV9rZXkgPSBGYWxzZQorICAgICAgICBzZWxmLnBvc3NpYmxlX3NpbXBsZV9rZXlzID0ge30KKworICAgICAgICAjIFJlYWQgdGhlIHRva2VuLgorICAgICAgICBtYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIAorICAgICAgICAjIEFkZCBTVFJFQU0tRU5ELgorICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoU3RyZWFtRW5kVG9rZW4obWFyaywgbWFyaykpCisKKyAgICAgICAgIyBUaGUgc3RlYW0gaXMgZmluaXNoZWQuCisgICAgICAgIHNlbGYuZG9uZSA9IFRydWUKKworICAgIGRlZiBmZXRjaF9kaXJlY3RpdmUoc2VsZik6CisgICAgICAgIAorICAgICAgICAjIFNldCB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiB0byAtMS4KKyAgICAgICAgc2VsZi51bndpbmRfaW5kZW50KC0xKQorCisgICAgICAgICMgUmVzZXQgc2ltcGxlIGtleXMuCisgICAgICAgIHNlbGYucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKQorICAgICAgICBzZWxmLmFsbG93X3NpbXBsZV9rZXkgPSBGYWxzZQorCisgICAgICAgICMgU2NhbiBhbmQgYWRkIERJUkVDVElWRS4KKyAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKHNlbGYuc2Nhbl9kaXJlY3RpdmUoKSkKKworICAgIGRlZiBmZXRjaF9kb2N1bWVudF9zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5mZXRjaF9kb2N1bWVudF9pbmRpY2F0b3IoRG9jdW1lbnRTdGFydFRva2VuKQorCisgICAgZGVmIGZldGNoX2RvY3VtZW50X2VuZChzZWxmKToKKyAgICAgICAgc2VsZi5mZXRjaF9kb2N1bWVudF9pbmRpY2F0b3IoRG9jdW1lbnRFbmRUb2tlbikKKworICAgIGRlZiBmZXRjaF9kb2N1bWVudF9pbmRpY2F0b3Ioc2VsZiwgVG9rZW5DbGFzcyk6CisKKyAgICAgICAgIyBTZXQgdGhlIGN1cnJlbnQgaW5kZW50YXRpb24gdG8gLTEuCisgICAgICAgIHNlbGYudW53aW5kX2luZGVudCgtMSkKKworICAgICAgICAjIFJlc2V0IHNpbXBsZSBrZXlzLiBOb3RlIHRoYXQgdGhlcmUgY291bGQgbm90IGJlIGEgYmxvY2sgY29sbGVjdGlvbgorICAgICAgICAjIGFmdGVyICctLS0nLgorICAgICAgICBzZWxmLnJlbW92ZV9wb3NzaWJsZV9zaW1wbGVfa2V5KCkKKyAgICAgICAgc2VsZi5hbGxvd19zaW1wbGVfa2V5ID0gRmFsc2UKKworICAgICAgICAjIEFkZCBET0NVTUVOVC1TVEFSVCBvciBET0NVTUVOVC1FTkQuCisgICAgICAgIHN0YXJ0X21hcmsgPSBzZWxmLmdldF9tYXJrKCkKKyAgICAgICAgc2VsZi5mb3J3YXJkKDMpCisgICAgICAgIGVuZF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChUb2tlbkNsYXNzKHN0YXJ0X21hcmssIGVuZF9tYXJrKSkKKworICAgIGRlZiBmZXRjaF9mbG93X3NlcXVlbmNlX3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmZldGNoX2Zsb3dfY29sbGVjdGlvbl9zdGFydChGbG93U2VxdWVuY2VTdGFydFRva2VuKQorCisgICAgZGVmIGZldGNoX2Zsb3dfbWFwcGluZ19zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5mZXRjaF9mbG93X2NvbGxlY3Rpb25fc3RhcnQoRmxvd01hcHBpbmdTdGFydFRva2VuKQorCisgICAgZGVmIGZldGNoX2Zsb3dfY29sbGVjdGlvbl9zdGFydChzZWxmLCBUb2tlbkNsYXNzKToKKworICAgICAgICAjICdbJyBhbmQgJ3snIG1heSBzdGFydCBhIHNpbXBsZSBrZXkuCisgICAgICAgIHNlbGYuc2F2ZV9wb3NzaWJsZV9zaW1wbGVfa2V5KCkKKworICAgICAgICAjIEluY3JlYXNlIHRoZSBmbG93IGxldmVsLgorICAgICAgICBzZWxmLmZsb3dfbGV2ZWwgKz0gMQorCisgICAgICAgICMgU2ltcGxlIGtleXMgYXJlIGFsbG93ZWQgYWZ0ZXIgJ1snIGFuZCAneycuCisgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IFRydWUKKworICAgICAgICAjIEFkZCBGTE9XLVNFUVVFTkNFLVNUQVJUIG9yIEZMT1ctTUFQUElORy1TVEFSVC4KKyAgICAgICAgc3RhcnRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoVG9rZW5DbGFzcyhzdGFydF9tYXJrLCBlbmRfbWFyaykpCisKKyAgICBkZWYgZmV0Y2hfZmxvd19zZXF1ZW5jZV9lbmQoc2VsZik6CisgICAgICAgIHNlbGYuZmV0Y2hfZmxvd19jb2xsZWN0aW9uX2VuZChGbG93U2VxdWVuY2VFbmRUb2tlbikKKworICAgIGRlZiBmZXRjaF9mbG93X21hcHBpbmdfZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmZldGNoX2Zsb3dfY29sbGVjdGlvbl9lbmQoRmxvd01hcHBpbmdFbmRUb2tlbikKKworICAgIGRlZiBmZXRjaF9mbG93X2NvbGxlY3Rpb25fZW5kKHNlbGYsIFRva2VuQ2xhc3MpOgorCisgICAgICAgICMgUmVzZXQgcG9zc2libGUgc2ltcGxlIGtleSBvbiB0aGUgY3VycmVudCBsZXZlbC4KKyAgICAgICAgc2VsZi5yZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSgpCisKKyAgICAgICAgIyBEZWNyZWFzZSB0aGUgZmxvdyBsZXZlbC4KKyAgICAgICAgc2VsZi5mbG93X2xldmVsIC09IDEKKworICAgICAgICAjIE5vIHNpbXBsZSBrZXlzIGFmdGVyICddJyBvciAnfScuCisgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IEZhbHNlCisKKyAgICAgICAgIyBBZGQgRkxPVy1TRVFVRU5DRS1FTkQgb3IgRkxPVy1NQVBQSU5HLUVORC4KKyAgICAgICAgc3RhcnRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoVG9rZW5DbGFzcyhzdGFydF9tYXJrLCBlbmRfbWFyaykpCisKKyAgICBkZWYgZmV0Y2hfZmxvd19lbnRyeShzZWxmKToKKworICAgICAgICAjIFNpbXBsZSBrZXlzIGFyZSBhbGxvd2VkIGFmdGVyICcsJy4KKyAgICAgICAgc2VsZi5hbGxvd19zaW1wbGVfa2V5ID0gVHJ1ZQorCisgICAgICAgICMgUmVzZXQgcG9zc2libGUgc2ltcGxlIGtleSBvbiB0aGUgY3VycmVudCBsZXZlbC4KKyAgICAgICAgc2VsZi5yZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSgpCisKKyAgICAgICAgIyBBZGQgRkxPVy1FTlRSWS4KKyAgICAgICAgc3RhcnRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoRmxvd0VudHJ5VG9rZW4oc3RhcnRfbWFyaywgZW5kX21hcmspKQorCisgICAgZGVmIGZldGNoX2Jsb2NrX2VudHJ5KHNlbGYpOgorCisgICAgICAgICMgQmxvY2sgY29udGV4dCBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcy4KKyAgICAgICAgaWYgbm90IHNlbGYuZmxvd19sZXZlbDoKKworICAgICAgICAgICAgIyBBcmUgd2UgYWxsb3dlZCB0byBzdGFydCBhIG5ldyBlbnRyeT8KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFsbG93X3NpbXBsZV9rZXk6CisgICAgICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgZW50cmllcyBhcmUgbm90IGFsbG93ZWQgaGVyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9tYXJrKCkpCisKKyAgICAgICAgICAgICMgV2UgbWF5IG5lZWQgdG8gYWRkIEJMT0NLLVNFUVVFTkNFLVNUQVJULgorICAgICAgICAgICAgaWYgc2VsZi5hZGRfaW5kZW50KHNlbGYuY29sdW1uKToKKyAgICAgICAgICAgICAgICBtYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgICAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKEJsb2NrU2VxdWVuY2VTdGFydFRva2VuKG1hcmssIG1hcmspKQorCisgICAgICAgICMgSXQncyBhbiBlcnJvciBmb3IgdGhlIGJsb2NrIGVudHJ5IHRvIG9jY3VyIGluIHRoZSBmbG93IGNvbnRleHQsCisgICAgICAgICMgYnV0IHdlIGxldCB0aGUgcGFyc2VyIGRldGVjdCB0aGlzLgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgU2ltcGxlIGtleXMgYXJlIGFsbG93ZWQgYWZ0ZXIgJy0nLgorICAgICAgICBzZWxmLmFsbG93X3NpbXBsZV9rZXkgPSBUcnVlCisKKyAgICAgICAgIyBSZXNldCBwb3NzaWJsZSBzaW1wbGUga2V5IG9uIHRoZSBjdXJyZW50IGxldmVsLgorICAgICAgICBzZWxmLnJlbW92ZV9wb3NzaWJsZV9zaW1wbGVfa2V5KCkKKworICAgICAgICAjIEFkZCBCTE9DSy1FTlRSWS4KKyAgICAgICAgc3RhcnRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoQmxvY2tFbnRyeVRva2VuKHN0YXJ0X21hcmssIGVuZF9tYXJrKSkKKworICAgIGRlZiBmZXRjaF9rZXkoc2VsZik6CisgICAgICAgIAorICAgICAgICAjIEJsb2NrIGNvbnRleHQgbmVlZHMgYWRkaXRpb25hbCBjaGVja3MuCisgICAgICAgIGlmIG5vdCBzZWxmLmZsb3dfbGV2ZWw6CisKKyAgICAgICAgICAgICMgQXJlIHdlIGFsbG93ZWQgdG8gc3RhcnQgYSBrZXkgKG5vdCBuZWNlc3NhcnkgYSBzaW1wbGUpPworICAgICAgICAgICAgaWYgbm90IHNlbGYuYWxsb3dfc2ltcGxlX2tleToKKyAgICAgICAgICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtYXBwaW5nIGtleXMgYXJlIG5vdCBhbGxvd2VkIGhlcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfbWFyaygpKQorCisgICAgICAgICAgICAjIFdlIG1heSBuZWVkIHRvIGFkZCBCTE9DSy1NQVBQSU5HLVNUQVJULgorICAgICAgICAgICAgaWYgc2VsZi5hZGRfaW5kZW50KHNlbGYuY29sdW1uKToKKyAgICAgICAgICAgICAgICBtYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgICAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKEJsb2NrTWFwcGluZ1N0YXJ0VG9rZW4obWFyaywgbWFyaykpCisKKyAgICAgICAgIyBTaW1wbGUga2V5cyBhcmUgYWxsb3dlZCBhZnRlciAnPycgaW4gdGhlIGJsb2NrIGNvbnRleHQuCisgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IG5vdCBzZWxmLmZsb3dfbGV2ZWwKKworICAgICAgICAjIFJlc2V0IHBvc3NpYmxlIHNpbXBsZSBrZXkgb24gdGhlIGN1cnJlbnQgbGV2ZWwuCisgICAgICAgIHNlbGYucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKQorCisgICAgICAgICMgQWRkIEtFWS4KKyAgICAgICAgc3RhcnRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoS2V5VG9rZW4oc3RhcnRfbWFyaywgZW5kX21hcmspKQorCisgICAgZGVmIGZldGNoX3ZhbHVlKHNlbGYpOgorCisgICAgICAgICMgRG8gd2UgZGV0ZXJtaW5lIGEgc2ltcGxlIGtleT8KKyAgICAgICAgaWYgc2VsZi5mbG93X2xldmVsIGluIHNlbGYucG9zc2libGVfc2ltcGxlX2tleXM6CisKKyAgICAgICAgICAgICMgQWRkIEtFWS4KKyAgICAgICAgICAgIGtleSA9IHNlbGYucG9zc2libGVfc2ltcGxlX2tleXNbc2VsZi5mbG93X2xldmVsXQorICAgICAgICAgICAgZGVsIHNlbGYucG9zc2libGVfc2ltcGxlX2tleXNbc2VsZi5mbG93X2xldmVsXQorICAgICAgICAgICAgc2VsZi50b2tlbnMuaW5zZXJ0KGtleS50b2tlbl9udW1iZXItc2VsZi50b2tlbnNfdGFrZW4sCisgICAgICAgICAgICAgICAgICAgIEtleVRva2VuKGtleS5tYXJrLCBrZXkubWFyaykpCisKKyAgICAgICAgICAgICMgSWYgdGhpcyBrZXkgc3RhcnRzIGEgbmV3IGJsb2NrIG1hcHBpbmcsIHdlIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAjIEJMT0NLLU1BUFBJTkctU1RBUlQuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5mbG93X2xldmVsOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuYWRkX2luZGVudChrZXkuY29sdW1uKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50b2tlbnMuaW5zZXJ0KGtleS50b2tlbl9udW1iZXItc2VsZi50b2tlbnNfdGFrZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tNYXBwaW5nU3RhcnRUb2tlbihrZXkubWFyaywga2V5Lm1hcmspKQorCisgICAgICAgICAgICAjIFRoZXJlIGNhbm5vdCBiZSB0d28gc2ltcGxlIGtleXMgb25lIGFmdGVyIGFub3RoZXIuCisgICAgICAgICAgICBzZWxmLmFsbG93X3NpbXBsZV9rZXkgPSBGYWxzZQorCisgICAgICAgICMgSXQgbXVzdCBiZSBhIHBhcnQgb2YgYSBjb21wbGV4IGtleS4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgIyBCbG9jayBjb250ZXh0IG5lZWRzIGFkZGl0aW9uYWwgY2hlY2tzLgorICAgICAgICAgICAgIyAoRG8gd2UgcmVhbGx5IG5lZWQgdGhlbT8gVGhleSB3aWxsIGJlIGNhdWdodCBieSB0aGUgcGFyc2VyCisgICAgICAgICAgICAjIGFueXdheS4pCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5mbG93X2xldmVsOgorCisgICAgICAgICAgICAgICAgIyBXZSBhcmUgYWxsb3dlZCB0byBzdGFydCBhIGNvbXBsZXggdmFsdWUgaWYgYW5kIG9ubHkgaWYKKyAgICAgICAgICAgICAgICAjIHdlIGNhbiBzdGFydCBhIHNpbXBsZSBrZXkuCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuYWxsb3dfc2ltcGxlX2tleToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hcHBpbmcgdmFsdWVzIGFyZSBub3QgYWxsb3dlZCBoZXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9tYXJrKCkpCisKKyAgICAgICAgICAgICMgSWYgdGhpcyB2YWx1ZSBzdGFydHMgYSBuZXcgYmxvY2sgbWFwcGluZywgd2UgbmVlZCB0byBhZGQKKyAgICAgICAgICAgICMgQkxPQ0stTUFQUElORy1TVEFSVC4gIEl0IHdpbGwgYmUgZGV0ZWN0ZWQgYXMgYW4gZXJyb3IgbGF0ZXIgYnkKKyAgICAgICAgICAgICMgdGhlIHBhcnNlci4KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmZsb3dfbGV2ZWw6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5hZGRfaW5kZW50KHNlbGYuY29sdW1uKToKKyAgICAgICAgICAgICAgICAgICAgbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoQmxvY2tNYXBwaW5nU3RhcnRUb2tlbihtYXJrLCBtYXJrKSkKKworICAgICAgICAgICAgIyBTaW1wbGUga2V5cyBhcmUgYWxsb3dlZCBhZnRlciAnOicgaW4gdGhlIGJsb2NrIGNvbnRleHQuCisgICAgICAgICAgICBzZWxmLmFsbG93X3NpbXBsZV9rZXkgPSBub3Qgc2VsZi5mbG93X2xldmVsCisKKyAgICAgICAgICAgICMgUmVzZXQgcG9zc2libGUgc2ltcGxlIGtleSBvbiB0aGUgY3VycmVudCBsZXZlbC4KKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKQorCisgICAgICAgICMgQWRkIFZBTFVFLgorICAgICAgICBzdGFydF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIGVuZF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChWYWx1ZVRva2VuKHN0YXJ0X21hcmssIGVuZF9tYXJrKSkKKworICAgIGRlZiBmZXRjaF9hbGlhcyhzZWxmKToKKworICAgICAgICAjIEFMSUFTIGNvdWxkIGJlIGEgc2ltcGxlIGtleS4KKyAgICAgICAgc2VsZi5zYXZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKQorCisgICAgICAgICMgTm8gc2ltcGxlIGtleXMgYWZ0ZXIgQUxJQVMuCisgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IEZhbHNlCisKKyAgICAgICAgIyBTY2FuIGFuZCBhZGQgQUxJQVMuCisgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChzZWxmLnNjYW5fYW5jaG9yKEFsaWFzVG9rZW4pKQorCisgICAgZGVmIGZldGNoX2FuY2hvcihzZWxmKToKKworICAgICAgICAjIEFOQ0hPUiBjb3VsZCBzdGFydCBhIHNpbXBsZSBrZXkuCisgICAgICAgIHNlbGYuc2F2ZV9wb3NzaWJsZV9zaW1wbGVfa2V5KCkKKworICAgICAgICAjIE5vIHNpbXBsZSBrZXlzIGFmdGVyIEFOQ0hPUi4KKyAgICAgICAgc2VsZi5hbGxvd19zaW1wbGVfa2V5ID0gRmFsc2UKKworICAgICAgICAjIFNjYW4gYW5kIGFkZCBBTkNIT1IuCisgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChzZWxmLnNjYW5fYW5jaG9yKEFuY2hvclRva2VuKSkKKworICAgIGRlZiBmZXRjaF90YWcoc2VsZik6CisKKyAgICAgICAgIyBUQUcgY291bGQgc3RhcnQgYSBzaW1wbGUga2V5LgorICAgICAgICBzZWxmLnNhdmVfcG9zc2libGVfc2ltcGxlX2tleSgpCisKKyAgICAgICAgIyBObyBzaW1wbGUga2V5cyBhZnRlciBUQUcuCisgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IEZhbHNlCisKKyAgICAgICAgIyBTY2FuIGFuZCBhZGQgVEFHLgorICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoc2VsZi5zY2FuX3RhZygpKQorCisgICAgZGVmIGZldGNoX2xpdGVyYWwoc2VsZik6CisgICAgICAgIHNlbGYuZmV0Y2hfYmxvY2tfc2NhbGFyKHN0eWxlPSd8JykKKworICAgIGRlZiBmZXRjaF9mb2xkZWQoc2VsZik6CisgICAgICAgIHNlbGYuZmV0Y2hfYmxvY2tfc2NhbGFyKHN0eWxlPSc+JykKKworICAgIGRlZiBmZXRjaF9ibG9ja19zY2FsYXIoc2VsZiwgc3R5bGUpOgorCisgICAgICAgICMgQSBzaW1wbGUga2V5IG1heSBmb2xsb3cgYSBibG9jayBzY2FsYXIuCisgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IFRydWUKKworICAgICAgICAjIFJlc2V0IHBvc3NpYmxlIHNpbXBsZSBrZXkgb24gdGhlIGN1cnJlbnQgbGV2ZWwuCisgICAgICAgIHNlbGYucmVtb3ZlX3Bvc3NpYmxlX3NpbXBsZV9rZXkoKQorCisgICAgICAgICMgU2NhbiBhbmQgYWRkIFNDQUxBUi4KKyAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKHNlbGYuc2Nhbl9ibG9ja19zY2FsYXIoc3R5bGUpKQorCisgICAgZGVmIGZldGNoX3NpbmdsZShzZWxmKToKKyAgICAgICAgc2VsZi5mZXRjaF9mbG93X3NjYWxhcihzdHlsZT0nXCcnKQorCisgICAgZGVmIGZldGNoX2RvdWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5mZXRjaF9mbG93X3NjYWxhcihzdHlsZT0nIicpCisKKyAgICBkZWYgZmV0Y2hfZmxvd19zY2FsYXIoc2VsZiwgc3R5bGUpOgorCisgICAgICAgICMgQSBmbG93IHNjYWxhciBjb3VsZCBiZSBhIHNpbXBsZSBrZXkuCisgICAgICAgIHNlbGYuc2F2ZV9wb3NzaWJsZV9zaW1wbGVfa2V5KCkKKworICAgICAgICAjIE5vIHNpbXBsZSBrZXlzIGFmdGVyIGZsb3cgc2NhbGFycy4KKyAgICAgICAgc2VsZi5hbGxvd19zaW1wbGVfa2V5ID0gRmFsc2UKKworICAgICAgICAjIFNjYW4gYW5kIGFkZCBTQ0FMQVIuCisgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChzZWxmLnNjYW5fZmxvd19zY2FsYXIoc3R5bGUpKQorCisgICAgZGVmIGZldGNoX3BsYWluKHNlbGYpOgorCisgICAgICAgICMgQSBwbGFpbiBzY2FsYXIgY291bGQgYmUgYSBzaW1wbGUga2V5LgorICAgICAgICBzZWxmLnNhdmVfcG9zc2libGVfc2ltcGxlX2tleSgpCisKKyAgICAgICAgIyBObyBzaW1wbGUga2V5cyBhZnRlciBwbGFpbiBzY2FsYXJzLiBCdXQgbm90ZSB0aGF0IGBzY2FuX3BsYWluYCB3aWxsCisgICAgICAgICMgY2hhbmdlIHRoaXMgZmxhZyBpZiB0aGUgc2NhbiBpcyBmaW5pc2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICAgICAjIGxpbmUuCisgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IEZhbHNlCisKKyAgICAgICAgIyBTY2FuIGFuZCBhZGQgU0NBTEFSLiBNYXkgY2hhbmdlIGBhbGxvd19zaW1wbGVfa2V5YC4KKyAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKHNlbGYuc2Nhbl9wbGFpbigpKQorCisgICAgIyBDaGVja2Vycy4KKworICAgIGRlZiBjaGVja19kaXJlY3RpdmUoc2VsZik6CisKKyAgICAgICAgIyBESVJFQ1RJVkU6ICAgICAgICBeICclJyAuLi4KKyAgICAgICAgIyBUaGUgJyUnIGluZGljYXRvciBpcyBhbHJlYWR5IGNoZWNrZWQuCisgICAgICAgIGlmIHNlbGYuY29sdW1uID09IDA6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNoZWNrX2RvY3VtZW50X3N0YXJ0KHNlbGYpOgorCisgICAgICAgICMgRE9DVU1FTlQtU1RBUlQ6ICAgXiAnLS0tJyAoJyAnfCdcbicpCisgICAgICAgIGlmIHNlbGYuY29sdW1uID09IDA6CisgICAgICAgICAgICBpZiBzZWxmLnByZWZpeCgzKSA9PSAnLS0tJyAgXAorICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5wZWVrKDMpIGluICdcMCBcdFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNoZWNrX2RvY3VtZW50X2VuZChzZWxmKToKKworICAgICAgICAjIERPQ1VNRU5ULUVORDogICAgIF4gJy4uLicgKCcgJ3wnXG4nKQorICAgICAgICBpZiBzZWxmLmNvbHVtbiA9PSAwOgorICAgICAgICAgICAgaWYgc2VsZi5wcmVmaXgoMykgPT0gJy4uLicgIFwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYucGVlaygzKSBpbiAnXDAgXHRcclxuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjaGVja19ibG9ja19lbnRyeShzZWxmKToKKworICAgICAgICAjIEJMT0NLLUVOVFJZOiAgICAgICctJyAoJyAnfCdcbicpCisgICAgICAgIHJldHVybiBzZWxmLnBlZWsoMSkgaW4gJ1wwIFx0XHJcblx4ODVcdTIwMjhcdTIwMjknCisKKyAgICBkZWYgY2hlY2tfa2V5KHNlbGYpOgorCisgICAgICAgICMgS0VZKGZsb3cgY29udGV4dCk6ICAgICc/JworICAgICAgICBpZiBzZWxmLmZsb3dfbGV2ZWw6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgS0VZKGJsb2NrIGNvbnRleHQpOiAgICc/JyAoJyAnfCdcbicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wZWVrKDEpIGluICdcMCBcdFxyXG5ceDg1XHUyMDI4XHUyMDI5JworCisgICAgZGVmIGNoZWNrX3ZhbHVlKHNlbGYpOgorCisgICAgICAgICMgVkFMVUUoZmxvdyBjb250ZXh0KTogICc6JworICAgICAgICBpZiBzZWxmLmZsb3dfbGV2ZWw6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgVkFMVUUoYmxvY2sgY29udGV4dCk6ICc6JyAoJyAnfCdcbicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wZWVrKDEpIGluICdcMCBcdFxyXG5ceDg1XHUyMDI4XHUyMDI5JworCisgICAgZGVmIGNoZWNrX3BsYWluKHNlbGYpOgorCisgICAgICAgICMgQSBwbGFpbiBzY2FsYXIgbWF5IHN0YXJ0IHdpdGggYW55IG5vbi1zcGFjZSBjaGFyYWN0ZXIgZXhjZXB0OgorICAgICAgICAjICAgJy0nLCAnPycsICc6JywgJywnLCAnWycsICddJywgJ3snLCAnfScsCisgICAgICAgICMgICAnIycsICcmJywgJyonLCAnIScsICd8JywgJz4nLCAnXCcnLCAnXCInLAorICAgICAgICAjICAgJyUnLCAnQCcsICdgJy4KKyAgICAgICAgIworICAgICAgICAjIEl0IG1heSBhbHNvIHN0YXJ0IHdpdGgKKyAgICAgICAgIyAgICctJywgJz8nLCAnOicKKyAgICAgICAgIyBpZiBpdCBpcyBmb2xsb3dlZCBieSBhIG5vbi1zcGFjZSBjaGFyYWN0ZXIuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgd2UgbGltaXQgdGhlIGxhc3QgcnVsZSB0byB0aGUgYmxvY2sgY29udGV4dCAoZXhjZXB0IHRoZQorICAgICAgICAjICctJyBjaGFyYWN0ZXIpIGJlY2F1c2Ugd2Ugd2FudCB0aGUgZmxvdyBjb250ZXh0IHRvIGJlIHNwYWNlCisgICAgICAgICMgaW5kZXBlbmRlbnQuCisgICAgICAgIGNoID0gc2VsZi5wZWVrKCkKKyAgICAgICAgcmV0dXJuIGNoIG5vdCBpbiAnXDAgXHRcclxuXHg4NVx1MjAyOFx1MjAyOS0/OixbXXt9IyYqIXw+XCdcIiVAYCcgIFwKKyAgICAgICAgICAgICAgICBvciAoc2VsZi5wZWVrKDEpIG5vdCBpbiAnXDAgXHRcclxuXHg4NVx1MjAyOFx1MjAyOScKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAoY2ggPT0gJy0nIG9yIChub3Qgc2VsZi5mbG93X2xldmVsIGFuZCBjaCBpbiAnPzonKSkpCisKKyAgICAjIFNjYW5uZXJzLgorCisgICAgZGVmIHNjYW5fdG9fbmV4dF90b2tlbihzZWxmKToKKyAgICAgICAgIyBXZSBpZ25vcmUgc3BhY2VzLCBsaW5lIGJyZWFrcyBhbmQgY29tbWVudHMuCisgICAgICAgICMgSWYgd2UgZmluZCBhIGxpbmUgYnJlYWsgaW4gdGhlIGJsb2NrIGNvbnRleHQsIHdlIHNldCB0aGUgZmxhZworICAgICAgICAjIGBhbGxvd19zaW1wbGVfa2V5YCBvbi4KKyAgICAgICAgIyBUaGUgYnl0ZSBvcmRlciBtYXJrIGlzIHN0cmlwcGVkIGlmIGl0J3MgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUKKyAgICAgICAgIyBzdHJlYW0uIFdlIGRvIG5vdCB5ZXQgc3VwcG9ydCBCT00gaW5zaWRlIHRoZSBzdHJlYW0gYXMgdGhlCisgICAgICAgICMgc3BlY2lmaWNhdGlvbiByZXF1aXJlcy4gQW55IHN1Y2ggbWFyayB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgYSBwYXJ0CisgICAgICAgICMgb2YgdGhlIGRvY3VtZW50LgorICAgICAgICAjCisgICAgICAgICMgVE9ETzogV2UgbmVlZCB0byBtYWtlIHRhYiBoYW5kbGluZyBydWxlcyBtb3JlIHNhbmUuIEEgZ29vZCBydWxlIGlzCisgICAgICAgICMgICBUYWJzIGNhbm5vdCBwcmVjZWRlIHRva2VucworICAgICAgICAjICAgQkxPQ0stU0VRVUVOQ0UtU1RBUlQsIEJMT0NLLU1BUFBJTkctU1RBUlQsIEJMT0NLLUVORCwKKyAgICAgICAgIyAgIEtFWShibG9jayksIFZBTFVFKGJsb2NrKSwgQkxPQ0stRU5UUlkKKyAgICAgICAgIyBTbyB0aGUgY2hlY2tpbmcgY29kZSBpcworICAgICAgICAjICAgaWYgPFRBQj46CisgICAgICAgICMgICAgICAgc2VsZi5hbGxvd19zaW1wbGVfa2V5cyA9IEZhbHNlCisgICAgICAgICMgV2UgYWxzbyBuZWVkIHRvIGFkZCB0aGUgY2hlY2sgZm9yIGBhbGxvd19zaW1wbGVfa2V5cyA9PSBUcnVlYCB0bworICAgICAgICAjIGB1bndpbmRfaW5kZW50YCBiZWZvcmUgaXNzdWluZyBCTE9DSy1FTkQuCisgICAgICAgICMgU2Nhbm5lcnMgZm9yIGJsb2NrLCBmbG93LCBhbmQgcGxhaW4gc2NhbGFycyBuZWVkIHRvIGJlIG1vZGlmaWVkLgorCisgICAgICAgIGlmIHNlbGYuaW5kZXggPT0gMCBhbmQgc2VsZi5wZWVrKCkgPT0gJ1x1RkVGRic6CisgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIHdoaWxlIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIHdoaWxlIHNlbGYucGVlaygpID09ICcgJzoKKyAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICAgICAgaWYgc2VsZi5wZWVrKCkgPT0gJyMnOgorICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYucGVlaygpIG5vdCBpbiAnXDBcclxuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgICAgICBpZiBzZWxmLnNjYW5fbGluZV9icmVhaygpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmZsb3dfbGV2ZWw6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisKKyAgICBkZWYgc2Nhbl9kaXJlY3RpdmUoc2VsZik6CisgICAgICAgICMgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICBzdGFydF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIG5hbWUgPSBzZWxmLnNjYW5fZGlyZWN0aXZlX25hbWUoc3RhcnRfbWFyaykKKyAgICAgICAgdmFsdWUgPSBOb25lCisgICAgICAgIGlmIG5hbWUgPT0gJ1lBTUwnOgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmLnNjYW5feWFtbF9kaXJlY3RpdmVfdmFsdWUoc3RhcnRfbWFyaykKKyAgICAgICAgICAgIGVuZF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIGVsaWYgbmFtZSA9PSAnVEFHJzoKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5zY2FuX3RhZ19kaXJlY3RpdmVfdmFsdWUoc3RhcnRfbWFyaykKKyAgICAgICAgICAgIGVuZF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5wZWVrKCkgbm90IGluICdcMFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBzZWxmLnNjYW5fZGlyZWN0aXZlX2lnbm9yZWRfbGluZShzdGFydF9tYXJrKQorICAgICAgICByZXR1cm4gRGlyZWN0aXZlVG9rZW4obmFtZSwgdmFsdWUsIHN0YXJ0X21hcmssIGVuZF9tYXJrKQorCisgICAgZGVmIHNjYW5fZGlyZWN0aXZlX25hbWUoc2VsZiwgc3RhcnRfbWFyayk6CisgICAgICAgICMgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICBsZW5ndGggPSAwCisgICAgICAgIGNoID0gc2VsZi5wZWVrKGxlbmd0aCkKKyAgICAgICAgd2hpbGUgJzAnIDw9IGNoIDw9ICc5JyBvciAnQScgPD0gY2ggPD0gJ1onIG9yICdhJyA8PSBjaCA8PSAneicgIFwKKyAgICAgICAgICAgICAgICBvciBjaCBpbiAnLV8nOgorICAgICAgICAgICAgbGVuZ3RoICs9IDEKKyAgICAgICAgICAgIGNoID0gc2VsZi5wZWVrKGxlbmd0aCkKKyAgICAgICAgaWYgbm90IGxlbmd0aDoKKyAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBkaXJlY3RpdmUiLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYWxwaGFiZXRpYyBvciBudW1lcmljIGNoYXJhY3RlciwgYnV0IGZvdW5kICVyIgorICAgICAgICAgICAgICAgICAgICAlIGNoLCBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgIHZhbHVlID0gc2VsZi5wcmVmaXgobGVuZ3RoKQorICAgICAgICBzZWxmLmZvcndhcmQobGVuZ3RoKQorICAgICAgICBjaCA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIGNoIG5vdCBpbiAnXDAgXHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGRpcmVjdGl2ZSIsIHN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhbHBoYWJldGljIG9yIG51bWVyaWMgY2hhcmFjdGVyLCBidXQgZm91bmQgJXIiCisgICAgICAgICAgICAgICAgICAgICUgY2gsIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgc2Nhbl95YW1sX2RpcmVjdGl2ZV92YWx1ZShzZWxmLCBzdGFydF9tYXJrKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgIHdoaWxlIHNlbGYucGVlaygpID09ICcgJzoKKyAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIG1ham9yID0gc2VsZi5zY2FuX3lhbWxfZGlyZWN0aXZlX251bWJlcihzdGFydF9tYXJrKQorICAgICAgICBpZiBzZWxmLnBlZWsoKSAhPSAnLic6CisgICAgICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgZGlyZWN0aXZlIiwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgZGlnaXQgb3IgJy4nLCBidXQgZm91bmQgJXIiICUgc2VsZi5wZWVrKCksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgbWlub3IgPSBzZWxmLnNjYW5feWFtbF9kaXJlY3RpdmVfbnVtYmVyKHN0YXJ0X21hcmspCisgICAgICAgIGlmIHNlbGYucGVlaygpIG5vdCBpbiAnXDAgXHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGRpcmVjdGl2ZSIsIHN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhIGRpZ2l0IG9yICcgJywgYnV0IGZvdW5kICVyIiAlIHNlbGYucGVlaygpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgIHJldHVybiAobWFqb3IsIG1pbm9yKQorCisgICAgZGVmIHNjYW5feWFtbF9kaXJlY3RpdmVfbnVtYmVyKHNlbGYsIHN0YXJ0X21hcmspOgorICAgICAgICAjIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKyAgICAgICAgY2ggPSBzZWxmLnBlZWsoKQorICAgICAgICBpZiBub3QgKCcwJyA8PSBjaCA8PSAnOScpOgorICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGRpcmVjdGl2ZSIsIHN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhIGRpZ2l0LCBidXQgZm91bmQgJXIiICUgY2gsIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgbGVuZ3RoID0gMAorICAgICAgICB3aGlsZSAnMCcgPD0gc2VsZi5wZWVrKGxlbmd0aCkgPD0gJzknOgorICAgICAgICAgICAgbGVuZ3RoICs9IDEKKyAgICAgICAgdmFsdWUgPSBpbnQoc2VsZi5wcmVmaXgobGVuZ3RoKSkKKyAgICAgICAgc2VsZi5mb3J3YXJkKGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgc2Nhbl90YWdfZGlyZWN0aXZlX3ZhbHVlKHNlbGYsIHN0YXJ0X21hcmspOgorICAgICAgICAjIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKyAgICAgICAgd2hpbGUgc2VsZi5wZWVrKCkgPT0gJyAnOgorICAgICAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgaGFuZGxlID0gc2VsZi5zY2FuX3RhZ19kaXJlY3RpdmVfaGFuZGxlKHN0YXJ0X21hcmspCisgICAgICAgIHdoaWxlIHNlbGYucGVlaygpID09ICcgJzoKKyAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIHByZWZpeCA9IHNlbGYuc2Nhbl90YWdfZGlyZWN0aXZlX3ByZWZpeChzdGFydF9tYXJrKQorICAgICAgICByZXR1cm4gKGhhbmRsZSwgcHJlZml4KQorCisgICAgZGVmIHNjYW5fdGFnX2RpcmVjdGl2ZV9oYW5kbGUoc2VsZiwgc3RhcnRfbWFyayk6CisgICAgICAgICMgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICB2YWx1ZSA9IHNlbGYuc2Nhbl90YWdfaGFuZGxlKCdkaXJlY3RpdmUnLCBzdGFydF9tYXJrKQorICAgICAgICBjaCA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIGNoICE9ICcgJzoKKyAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBkaXJlY3RpdmUiLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJyAnLCBidXQgZm91bmQgJXIiICUgY2gsIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgc2Nhbl90YWdfZGlyZWN0aXZlX3ByZWZpeChzZWxmLCBzdGFydF9tYXJrKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgIHZhbHVlID0gc2VsZi5zY2FuX3RhZ191cmkoJ2RpcmVjdGl2ZScsIHN0YXJ0X21hcmspCisgICAgICAgIGNoID0gc2VsZi5wZWVrKCkKKyAgICAgICAgaWYgY2ggbm90IGluICdcMCBcclxuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgZGlyZWN0aXZlIiwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICcgJywgYnV0IGZvdW5kICVyIiAlIGNoLCBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHNjYW5fZGlyZWN0aXZlX2lnbm9yZWRfbGluZShzZWxmLCBzdGFydF9tYXJrKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgIHdoaWxlIHNlbGYucGVlaygpID09ICcgJzoKKyAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIGlmIHNlbGYucGVlaygpID09ICcjJzoKKyAgICAgICAgICAgIHdoaWxlIHNlbGYucGVlaygpIG5vdCBpbiAnXDBcclxuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgY2ggPSBzZWxmLnBlZWsoKQorICAgICAgICBpZiBjaCBub3QgaW4gJ1wwXHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGRpcmVjdGl2ZSIsIHN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhIGNvbW1lbnQgb3IgYSBsaW5lIGJyZWFrLCBidXQgZm91bmQgJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAlIGNoLCBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgIHNlbGYuc2Nhbl9saW5lX2JyZWFrKCkKKworICAgIGRlZiBzY2FuX2FuY2hvcihzZWxmLCBUb2tlbkNsYXNzKToKKyAgICAgICAgIyBUaGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCByZXN0cmljdCBjaGFyYWN0ZXJzIGZvciBhbmNob3JzIGFuZAorICAgICAgICAjIGFsaWFzZXMuIFRoaXMgbWF5IGxlYWQgdG8gcHJvYmxlbXMsIGZvciBpbnN0YW5jZSwgdGhlIGRvY3VtZW50OgorICAgICAgICAjICAgWyAqYWxpYXMsIHZhbHVlIF0KKyAgICAgICAgIyBjYW4gYmUgaW50ZXJwcmV0ZWQgaW4gdHdvIHdheXMsIGFzCisgICAgICAgICMgICBbICJ2YWx1ZSIgXQorICAgICAgICAjIGFuZAorICAgICAgICAjICAgWyAqYWxpYXMgLCAidmFsdWUiIF0KKyAgICAgICAgIyBUaGVyZWZvcmUgd2UgcmVzdHJpY3QgYWxpYXNlcyB0byBudW1iZXJzIGFuZCBBU0NJSSBsZXR0ZXJzLgorICAgICAgICBzdGFydF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIGluZGljYXRvciA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIGluZGljYXRvciA9PSAnKic6CisgICAgICAgICAgICBuYW1lID0gJ2FsaWFzJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9ICdhbmNob3InCisgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIGxlbmd0aCA9IDAKKyAgICAgICAgY2ggPSBzZWxmLnBlZWsobGVuZ3RoKQorICAgICAgICB3aGlsZSAnMCcgPD0gY2ggPD0gJzknIG9yICdBJyA8PSBjaCA8PSAnWicgb3IgJ2EnIDw9IGNoIDw9ICd6JyAgXAorICAgICAgICAgICAgICAgIG9yIGNoIGluICctXyc6CisgICAgICAgICAgICBsZW5ndGggKz0gMQorICAgICAgICAgICAgY2ggPSBzZWxmLnBlZWsobGVuZ3RoKQorICAgICAgICBpZiBub3QgbGVuZ3RoOgorICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhbiAlcyIgJSBuYW1lLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYWxwaGFiZXRpYyBvciBudW1lcmljIGNoYXJhY3RlciwgYnV0IGZvdW5kICVyIgorICAgICAgICAgICAgICAgICAgICAlIGNoLCBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgIHZhbHVlID0gc2VsZi5wcmVmaXgobGVuZ3RoKQorICAgICAgICBzZWxmLmZvcndhcmQobGVuZ3RoKQorICAgICAgICBjaCA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIGNoIG5vdCBpbiAnXDAgXHRcclxuXHg4NVx1MjAyOFx1MjAyOT86LF19JUBgJzoKKyAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYW4gJXMiICUgbmFtZSwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGFscGhhYmV0aWMgb3IgbnVtZXJpYyBjaGFyYWN0ZXIsIGJ1dCBmb3VuZCAlciIKKyAgICAgICAgICAgICAgICAgICAgJSBjaCwgc2VsZi5nZXRfbWFyaygpKQorICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICByZXR1cm4gVG9rZW5DbGFzcyh2YWx1ZSwgc3RhcnRfbWFyaywgZW5kX21hcmspCisKKyAgICBkZWYgc2Nhbl90YWcoc2VsZik6CisgICAgICAgICMgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICBzdGFydF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIGNoID0gc2VsZi5wZWVrKDEpCisgICAgICAgIGlmIGNoID09ICc8JzoKKyAgICAgICAgICAgIGhhbmRsZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgyKQorICAgICAgICAgICAgc3VmZml4ID0gc2VsZi5zY2FuX3RhZ191cmkoJ3RhZycsIHN0YXJ0X21hcmspCisgICAgICAgICAgICBpZiBzZWxmLnBlZWsoKSAhPSAnPic6CisgICAgICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBwYXJzaW5nIGEgdGFnIiwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAnPicsIGJ1dCBmb3VuZCAlciIgJSBzZWxmLnBlZWsoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIGVsaWYgY2ggaW4gJ1wwIFx0XHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgaGFuZGxlID0gTm9uZQorICAgICAgICAgICAgc3VmZml4ID0gJyEnCisgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGVuZ3RoID0gMQorICAgICAgICAgICAgdXNlX2hhbmRsZSA9IEZhbHNlCisgICAgICAgICAgICB3aGlsZSBjaCBub3QgaW4gJ1wwIFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgICAgICBpZiBjaCA9PSAnISc6CisgICAgICAgICAgICAgICAgICAgIHVzZV9oYW5kbGUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IDEKKyAgICAgICAgICAgICAgICBjaCA9IHNlbGYucGVlayhsZW5ndGgpCisgICAgICAgICAgICBoYW5kbGUgPSAnIScKKyAgICAgICAgICAgIGlmIHVzZV9oYW5kbGU6CisgICAgICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5zY2FuX3RhZ19oYW5kbGUoJ3RhZycsIHN0YXJ0X21hcmspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhhbmRsZSA9ICchJworICAgICAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgICAgICBzdWZmaXggPSBzZWxmLnNjYW5fdGFnX3VyaSgndGFnJywgc3RhcnRfbWFyaykKKyAgICAgICAgY2ggPSBzZWxmLnBlZWsoKQorICAgICAgICBpZiBjaCBub3QgaW4gJ1wwIFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSB0YWciLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJyAnLCBidXQgZm91bmQgJXIiICUgY2gsIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgdmFsdWUgPSAoaGFuZGxlLCBzdWZmaXgpCisgICAgICAgIGVuZF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIHJldHVybiBUYWdUb2tlbih2YWx1ZSwgc3RhcnRfbWFyaywgZW5kX21hcmspCisKKyAgICBkZWYgc2Nhbl9ibG9ja19zY2FsYXIoc2VsZiwgc3R5bGUpOgorICAgICAgICAjIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKworICAgICAgICBpZiBzdHlsZSA9PSAnPic6CisgICAgICAgICAgICBmb2xkZWQgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb2xkZWQgPSBGYWxzZQorCisgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgIHN0YXJ0X21hcmsgPSBzZWxmLmdldF9tYXJrKCkKKworICAgICAgICAjIFNjYW4gdGhlIGhlYWRlci4KKyAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgY2hvbXBpbmcsIGluY3JlbWVudCA9IHNlbGYuc2Nhbl9ibG9ja19zY2FsYXJfaW5kaWNhdG9ycyhzdGFydF9tYXJrKQorICAgICAgICBzZWxmLnNjYW5fYmxvY2tfc2NhbGFyX2lnbm9yZWRfbGluZShzdGFydF9tYXJrKQorCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgZ28gdG8gdGhlIGZpcnN0IG5vbi1lbXB0eSBsaW5lLgorICAgICAgICBtaW5faW5kZW50ID0gc2VsZi5pbmRlbnQrMQorICAgICAgICBpZiBtaW5faW5kZW50IDwgMToKKyAgICAgICAgICAgIG1pbl9pbmRlbnQgPSAxCisgICAgICAgIGlmIGluY3JlbWVudCBpcyBOb25lOgorICAgICAgICAgICAgYnJlYWtzLCBtYXhfaW5kZW50LCBlbmRfbWFyayA9IHNlbGYuc2Nhbl9ibG9ja19zY2FsYXJfaW5kZW50YXRpb24oKQorICAgICAgICAgICAgaW5kZW50ID0gbWF4KG1pbl9pbmRlbnQsIG1heF9pbmRlbnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmRlbnQgPSBtaW5faW5kZW50K2luY3JlbWVudC0xCisgICAgICAgICAgICBicmVha3MsIGVuZF9tYXJrID0gc2VsZi5zY2FuX2Jsb2NrX3NjYWxhcl9icmVha3MoaW5kZW50KQorICAgICAgICBsaW5lX2JyZWFrID0gJycKKworICAgICAgICAjIFNjYW4gdGhlIGlubmVyIHBhcnQgb2YgdGhlIGJsb2NrIHNjYWxhci4KKyAgICAgICAgd2hpbGUgc2VsZi5jb2x1bW4gPT0gaW5kZW50IGFuZCBzZWxmLnBlZWsoKSAhPSAnXDAnOgorICAgICAgICAgICAgY2h1bmtzLmV4dGVuZChicmVha3MpCisgICAgICAgICAgICBsZWFkaW5nX25vbl9zcGFjZSA9IHNlbGYucGVlaygpIG5vdCBpbiAnIFx0JworICAgICAgICAgICAgbGVuZ3RoID0gMAorICAgICAgICAgICAgd2hpbGUgc2VsZi5wZWVrKGxlbmd0aCkgbm90IGluICdcMFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMQorICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChzZWxmLnByZWZpeChsZW5ndGgpKQorICAgICAgICAgICAgc2VsZi5mb3J3YXJkKGxlbmd0aCkKKyAgICAgICAgICAgIGxpbmVfYnJlYWsgPSBzZWxmLnNjYW5fbGluZV9icmVhaygpCisgICAgICAgICAgICBicmVha3MsIGVuZF9tYXJrID0gc2VsZi5zY2FuX2Jsb2NrX3NjYWxhcl9icmVha3MoaW5kZW50KQorICAgICAgICAgICAgaWYgc2VsZi5jb2x1bW4gPT0gaW5kZW50IGFuZCBzZWxmLnBlZWsoKSAhPSAnXDAnOgorCisgICAgICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCBmb2xkaW5nIHJ1bGVzIGFyZSBhbWJpZ3VvdXMuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgZm9sZGluZyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb246CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgZm9sZGVkIGFuZCBsaW5lX2JyZWFrID09ICdcbicgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxlYWRpbmdfbm9uX3NwYWNlIGFuZCBzZWxmLnBlZWsoKSBub3QgaW4gJyBcdCc6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBicmVha3M6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKCcgJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGxpbmVfYnJlYWspCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIENsYXJrIEV2YW5zJ3MgaW50ZXJwcmV0YXRpb24gKGFsc28gaW4gdGhlIHNwZWMKKyAgICAgICAgICAgICAgICAjIGV4YW1wbGVzKToKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgI2lmIGZvbGRlZCBhbmQgbGluZV9icmVhayA9PSAnXG4nOgorICAgICAgICAgICAgICAgICMgICAgaWYgbm90IGJyZWFrczoKKyAgICAgICAgICAgICAgICAjICAgICAgICBpZiBzZWxmLnBlZWsoKSBub3QgaW4gJyBcdCc6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoJyAnKQorICAgICAgICAgICAgICAgICMgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgIGNodW5rcy5hcHBlbmQobGluZV9icmVhaykKKyAgICAgICAgICAgICAgICAjZWxzZToKKyAgICAgICAgICAgICAgICAjICAgIGNodW5rcy5hcHBlbmQobGluZV9icmVhaykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIENob21wIHRoZSB0YWlsLgorICAgICAgICBpZiBjaG9tcGluZyBpcyBub3QgRmFsc2U6CisgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGxpbmVfYnJlYWspCisgICAgICAgIGlmIGNob21waW5nIGlzIFRydWU6CisgICAgICAgICAgICBjaHVua3MuZXh0ZW5kKGJyZWFrcykKKworICAgICAgICAjIFdlIGFyZSBkb25lLgorICAgICAgICByZXR1cm4gU2NhbGFyVG9rZW4oJycuam9pbihjaHVua3MpLCBGYWxzZSwgc3RhcnRfbWFyaywgZW5kX21hcmssCisgICAgICAgICAgICAgICAgc3R5bGUpCisKKyAgICBkZWYgc2Nhbl9ibG9ja19zY2FsYXJfaW5kaWNhdG9ycyhzZWxmLCBzdGFydF9tYXJrKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgIGNob21waW5nID0gTm9uZQorICAgICAgICBpbmNyZW1lbnQgPSBOb25lCisgICAgICAgIGNoID0gc2VsZi5wZWVrKCkKKyAgICAgICAgaWYgY2ggaW4gJystJzoKKyAgICAgICAgICAgIGlmIGNoID09ICcrJzoKKyAgICAgICAgICAgICAgICBjaG9tcGluZyA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2hvbXBpbmcgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgICAgIGNoID0gc2VsZi5wZWVrKCkKKyAgICAgICAgICAgIGlmIGNoIGluICcwMTIzNDU2Nzg5JzoKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnQgPSBpbnQoY2gpCisgICAgICAgICAgICAgICAgaWYgaW5jcmVtZW50ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBibG9jayBzY2FsYXIiLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgaW4gdGhlIHJhbmdlIDEtOSwgYnV0IGZvdW5kIDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBlbGlmIGNoIGluICcwMTIzNDU2Nzg5JzoKKyAgICAgICAgICAgIGluY3JlbWVudCA9IGludChjaCkKKyAgICAgICAgICAgIGlmIGluY3JlbWVudCA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBibG9jayBzY2FsYXIiLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGluZGVudGF0aW9uIGluZGljYXRvciBpbiB0aGUgcmFuZ2UgMS05LCBidXQgZm91bmQgMCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICAgICAgY2ggPSBzZWxmLnBlZWsoKQorICAgICAgICAgICAgaWYgY2ggaW4gJystJzoKKyAgICAgICAgICAgICAgICBpZiBjaCA9PSAnKyc6CisgICAgICAgICAgICAgICAgICAgIGNob21waW5nID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNob21waW5nID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBjaCA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIGNoIG5vdCBpbiAnXDAgXHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGJsb2NrIHNjYWxhciIsIHN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBjaG9tcGluZyBvciBpbmRlbnRhdGlvbiBpbmRpY2F0b3JzLCBidXQgZm91bmQgJXIiCisgICAgICAgICAgICAgICAgICAgICUgY2gsIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgcmV0dXJuIGNob21waW5nLCBpbmNyZW1lbnQKKworICAgIGRlZiBzY2FuX2Jsb2NrX3NjYWxhcl9pZ25vcmVkX2xpbmUoc2VsZiwgc3RhcnRfbWFyayk6CisgICAgICAgICMgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICB3aGlsZSBzZWxmLnBlZWsoKSA9PSAnICc6CisgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICBpZiBzZWxmLnBlZWsoKSA9PSAnIyc6CisgICAgICAgICAgICB3aGlsZSBzZWxmLnBlZWsoKSBub3QgaW4gJ1wwXHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIGNoID0gc2VsZi5wZWVrKCkKKyAgICAgICAgaWYgY2ggbm90IGluICdcMFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSBibG9jayBzY2FsYXIiLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBjb21tZW50IG9yIGEgbGluZSBicmVhaywgYnV0IGZvdW5kICVyIiAlIGNoLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgIHNlbGYuc2Nhbl9saW5lX2JyZWFrKCkKKworICAgIGRlZiBzY2FuX2Jsb2NrX3NjYWxhcl9pbmRlbnRhdGlvbihzZWxmKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgIG1heF9pbmRlbnQgPSAwCisgICAgICAgIGVuZF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIHdoaWxlIHNlbGYucGVlaygpIGluICcgXHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgaWYgc2VsZi5wZWVrKCkgIT0gJyAnOgorICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoc2VsZi5zY2FuX2xpbmVfYnJlYWsoKSkKKyAgICAgICAgICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29sdW1uID4gbWF4X2luZGVudDoKKyAgICAgICAgICAgICAgICAgICAgbWF4X2luZGVudCA9IHNlbGYuY29sdW1uCisgICAgICAgIHJldHVybiBjaHVua3MsIG1heF9pbmRlbnQsIGVuZF9tYXJrCisKKyAgICBkZWYgc2Nhbl9ibG9ja19zY2FsYXJfYnJlYWtzKHNlbGYsIGluZGVudCk6CisgICAgICAgICMgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICBjaHVua3MgPSBbXQorICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICB3aGlsZSBzZWxmLmNvbHVtbiA8IGluZGVudCBhbmQgc2VsZi5wZWVrKCkgPT0gJyAnOgorICAgICAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgd2hpbGUgc2VsZi5wZWVrKCkgaW4gJ1xyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoc2VsZi5zY2FuX2xpbmVfYnJlYWsoKSkKKyAgICAgICAgICAgIGVuZF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgICAgICB3aGlsZSBzZWxmLmNvbHVtbiA8IGluZGVudCBhbmQgc2VsZi5wZWVrKCkgPT0gJyAnOgorICAgICAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIHJldHVybiBjaHVua3MsIGVuZF9tYXJrCisKKyAgICBkZWYgc2Nhbl9mbG93X3NjYWxhcihzZWxmLCBzdHlsZSk6CisgICAgICAgICMgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICAjIE5vdGUgdGhhdCB3ZSBsb29zZSBpbmRlbnRhdGlvbiBydWxlcyBmb3IgcXVvdGVkIHNjYWxhcnMuIFF1b3RlZAorICAgICAgICAjIHNjYWxhcnMgZG9uJ3QgbmVlZCB0byBhZGhlcmUgaW5kZW50YXRpb24gYmVjYXVzZSAiIGFuZCAnIGNsZWFybHkKKyAgICAgICAgIyBtYXJrIHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgdGhlbS4gVGhlcmVmb3JlIHdlIGFyZSBsZXNzCisgICAgICAgICMgcmVzdHJpY3RpdmUgdGhlbiB0aGUgc3BlY2lmaWNhdGlvbiByZXF1aXJlcy4gV2Ugb25seSBuZWVkIHRvIGNoZWNrCisgICAgICAgICMgdGhhdCBkb2N1bWVudCBzZXBhcmF0b3JzIGFyZSBub3QgaW5jbHVkZWQgaW4gc2NhbGFycy4KKyAgICAgICAgaWYgc3R5bGUgPT0gJyInOgorICAgICAgICAgICAgZG91YmxlID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZG91YmxlID0gRmFsc2UKKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgc3RhcnRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICBxdW90ZSA9IHNlbGYucGVlaygpCisgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgIGNodW5rcy5leHRlbmQoc2VsZi5zY2FuX2Zsb3dfc2NhbGFyX25vbl9zcGFjZXMoZG91YmxlLCBzdGFydF9tYXJrKSkKKyAgICAgICAgd2hpbGUgc2VsZi5wZWVrKCkgIT0gcXVvdGU6CisgICAgICAgICAgICBjaHVua3MuZXh0ZW5kKHNlbGYuc2Nhbl9mbG93X3NjYWxhcl9zcGFjZXMoZG91YmxlLCBzdGFydF9tYXJrKSkKKyAgICAgICAgICAgIGNodW5rcy5leHRlbmQoc2VsZi5zY2FuX2Zsb3dfc2NhbGFyX25vbl9zcGFjZXMoZG91YmxlLCBzdGFydF9tYXJrKSkKKyAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgZW5kX21hcmsgPSBzZWxmLmdldF9tYXJrKCkKKyAgICAgICAgcmV0dXJuIFNjYWxhclRva2VuKCcnLmpvaW4oY2h1bmtzKSwgRmFsc2UsIHN0YXJ0X21hcmssIGVuZF9tYXJrLAorICAgICAgICAgICAgICAgIHN0eWxlKQorCisgICAgRVNDQVBFX1JFUExBQ0VNRU5UUyA9IHsKKyAgICAgICAgJzAnOiAgICAnXDAnLAorICAgICAgICAnYSc6ICAgICdceDA3JywKKyAgICAgICAgJ2InOiAgICAnXHgwOCcsCisgICAgICAgICd0JzogICAgJ1x4MDknLAorICAgICAgICAnXHQnOiAgICdceDA5JywKKyAgICAgICAgJ24nOiAgICAnXHgwQScsCisgICAgICAgICd2JzogICAgJ1x4MEInLAorICAgICAgICAnZic6ICAgICdceDBDJywKKyAgICAgICAgJ3InOiAgICAnXHgwRCcsCisgICAgICAgICdlJzogICAgJ1x4MUInLAorICAgICAgICAnICc6ICAgICdceDIwJywKKyAgICAgICAgJ1wiJzogICAnXCInLAorICAgICAgICAnXFwnOiAgICdcXCcsCisgICAgICAgICcvJzogICAgJy8nLAorICAgICAgICAnTic6ICAgICdceDg1JywKKyAgICAgICAgJ18nOiAgICAnXHhBMCcsCisgICAgICAgICdMJzogICAgJ1x1MjAyOCcsCisgICAgICAgICdQJzogICAgJ1x1MjAyOScsCisgICAgfQorCisgICAgRVNDQVBFX0NPREVTID0geworICAgICAgICAneCc6ICAgIDIsCisgICAgICAgICd1JzogICAgNCwKKyAgICAgICAgJ1UnOiAgICA4LAorICAgIH0KKworICAgIGRlZiBzY2FuX2Zsb3dfc2NhbGFyX25vbl9zcGFjZXMoc2VsZiwgZG91YmxlLCBzdGFydF9tYXJrKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsZW5ndGggPSAwCisgICAgICAgICAgICB3aGlsZSBzZWxmLnBlZWsobGVuZ3RoKSBub3QgaW4gJ1wnXCJcXFwwIFx0XHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgICAgIGxlbmd0aCArPSAxCisgICAgICAgICAgICBpZiBsZW5ndGg6CisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChzZWxmLnByZWZpeChsZW5ndGgpKQorICAgICAgICAgICAgICAgIHNlbGYuZm9yd2FyZChsZW5ndGgpCisgICAgICAgICAgICBjaCA9IHNlbGYucGVlaygpCisgICAgICAgICAgICBpZiBub3QgZG91YmxlIGFuZCBjaCA9PSAnXCcnIGFuZCBzZWxmLnBlZWsoMSkgPT0gJ1wnJzoKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKCdcJycpCisgICAgICAgICAgICAgICAgc2VsZi5mb3J3YXJkKDIpCisgICAgICAgICAgICBlbGlmIChkb3VibGUgYW5kIGNoID09ICdcJycpIG9yIChub3QgZG91YmxlIGFuZCBjaCBpbiAnXCJcXCcpOgorICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoY2gpCisgICAgICAgICAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgICAgIGVsaWYgZG91YmxlIGFuZCBjaCA9PSAnXFwnOgorICAgICAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgICAgICAgICAgY2ggPSBzZWxmLnBlZWsoKQorICAgICAgICAgICAgICAgIGlmIGNoIGluIHNlbGYuRVNDQVBFX1JFUExBQ0VNRU5UUzoKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChzZWxmLkVTQ0FQRV9SRVBMQUNFTUVOVFNbY2hdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICAgICAgICAgIGVsaWYgY2ggaW4gc2VsZi5FU0NBUEVfQ09ERVM6CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuRVNDQVBFX0NPREVTW2NoXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wZWVrKGspIG5vdCBpbiAnMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGRvdWJsZS1xdW90ZWQgc2NhbGFyIiwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBlc2NhcGUgc2VxdWVuY2Ugb2YgJWQgaGV4YWRlY2ltYWwgbnVtYmVycywgYnV0IGZvdW5kICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbmd0aCwgc2VsZi5wZWVrKGspKSwgc2VsZi5nZXRfbWFyaygpKQorICAgICAgICAgICAgICAgICAgICBjb2RlID0gaW50KHNlbGYucHJlZml4KGxlbmd0aCksIDE2KQorICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGNocihjb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3J3YXJkKGxlbmd0aCkKKyAgICAgICAgICAgICAgICBlbGlmIGNoIGluICdcclxuXHg4NVx1MjAyOFx1MjAyOSc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Nhbl9saW5lX2JyZWFrKCkKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzLmV4dGVuZChzZWxmLnNjYW5fZmxvd19zY2FsYXJfYnJlYWtzKGRvdWJsZSwgc3RhcnRfbWFyaykpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2Nhbm5lckVycm9yKCJ3aGlsZSBzY2FubmluZyBhIGRvdWJsZS1xdW90ZWQgc2NhbGFyIiwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm91bmQgdW5rbm93biBlc2NhcGUgY2hhcmFjdGVyICVyIiAlIGNoLCBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjaHVua3MKKworICAgIGRlZiBzY2FuX2Zsb3dfc2NhbGFyX3NwYWNlcyhzZWxmLCBkb3VibGUsIHN0YXJ0X21hcmspOgorICAgICAgICAjIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgbGVuZ3RoID0gMAorICAgICAgICB3aGlsZSBzZWxmLnBlZWsobGVuZ3RoKSBpbiAnIFx0JzoKKyAgICAgICAgICAgIGxlbmd0aCArPSAxCisgICAgICAgIHdoaXRlc3BhY2VzID0gc2VsZi5wcmVmaXgobGVuZ3RoKQorICAgICAgICBzZWxmLmZvcndhcmQobGVuZ3RoKQorICAgICAgICBjaCA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIGNoID09ICdcMCc6CisgICAgICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgcXVvdGVkIHNjYWxhciIsIHN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICJmb3VuZCB1bmV4cGVjdGVkIGVuZCBvZiBzdHJlYW0iLCBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgIGVsaWYgY2ggaW4gJ1xyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgIGxpbmVfYnJlYWsgPSBzZWxmLnNjYW5fbGluZV9icmVhaygpCisgICAgICAgICAgICBicmVha3MgPSBzZWxmLnNjYW5fZmxvd19zY2FsYXJfYnJlYWtzKGRvdWJsZSwgc3RhcnRfbWFyaykKKyAgICAgICAgICAgIGlmIGxpbmVfYnJlYWsgIT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGxpbmVfYnJlYWspCisgICAgICAgICAgICBlbGlmIG5vdCBicmVha3M6CisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZCgnICcpCisgICAgICAgICAgICBjaHVua3MuZXh0ZW5kKGJyZWFrcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNodW5rcy5hcHBlbmQod2hpdGVzcGFjZXMpCisgICAgICAgIHJldHVybiBjaHVua3MKKworICAgIGRlZiBzY2FuX2Zsb3dfc2NhbGFyX2JyZWFrcyhzZWxmLCBkb3VibGUsIHN0YXJ0X21hcmspOgorICAgICAgICAjIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgSW5zdGVhZCBvZiBjaGVja2luZyBpbmRlbnRhdGlvbiwgd2UgY2hlY2sgZm9yIGRvY3VtZW50CisgICAgICAgICAgICAjIHNlcGFyYXRvcnMuCisgICAgICAgICAgICBwcmVmaXggPSBzZWxmLnByZWZpeCgzKQorICAgICAgICAgICAgaWYgKHByZWZpeCA9PSAnLS0tJyBvciBwcmVmaXggPT0gJy4uLicpICAgXAorICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5wZWVrKDMpIGluICdcMCBcdFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgcXVvdGVkIHNjYWxhciIsIHN0YXJ0X21hcmssCisgICAgICAgICAgICAgICAgICAgICAgICAiZm91bmQgdW5leHBlY3RlZCBkb2N1bWVudCBzZXBhcmF0b3IiLCBzZWxmLmdldF9tYXJrKCkpCisgICAgICAgICAgICB3aGlsZSBzZWxmLnBlZWsoKSBpbiAnIFx0JzoKKyAgICAgICAgICAgICAgICBzZWxmLmZvcndhcmQoKQorICAgICAgICAgICAgaWYgc2VsZi5wZWVrKCkgaW4gJ1xyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHNlbGYuc2Nhbl9saW5lX2JyZWFrKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjaHVua3MKKworICAgIGRlZiBzY2FuX3BsYWluKHNlbGYpOgorICAgICAgICAjIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKyAgICAgICAgIyBXZSBhZGQgYW4gYWRkaXRpb25hbCByZXN0cmljdGlvbiBmb3IgdGhlIGZsb3cgY29udGV4dDoKKyAgICAgICAgIyAgIHBsYWluIHNjYWxhcnMgaW4gdGhlIGZsb3cgY29udGV4dCBjYW5ub3QgY29udGFpbiAnLCcgb3IgJz8nLgorICAgICAgICAjIFdlIGFsc28ga2VlcCB0cmFjayBvZiB0aGUgYGFsbG93X3NpbXBsZV9rZXlgIGZsYWcgaGVyZS4KKyAgICAgICAgIyBJbmRlbnRhdGlvbiBydWxlcyBhcmUgbG9vc2VkIGZvciB0aGUgZmxvdyBjb250ZXh0LgorICAgICAgICBjaHVua3MgPSBbXQorICAgICAgICBzdGFydF9tYXJrID0gc2VsZi5nZXRfbWFyaygpCisgICAgICAgIGVuZF9tYXJrID0gc3RhcnRfbWFyaworICAgICAgICBpbmRlbnQgPSBzZWxmLmluZGVudCsxCisgICAgICAgICMgV2UgYWxsb3cgemVybyBpbmRlbnRhdGlvbiBmb3Igc2NhbGFycywgYnV0IHRoZW4gd2UgbmVlZCB0byBjaGVjayBmb3IKKyAgICAgICAgIyBkb2N1bWVudCBzZXBhcmF0b3JzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuCisgICAgICAgICNpZiBpbmRlbnQgPT0gMDoKKyAgICAgICAgIyAgICBpbmRlbnQgPSAxCisgICAgICAgIHNwYWNlcyA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsZW5ndGggPSAwCisgICAgICAgICAgICBpZiBzZWxmLnBlZWsoKSA9PSAnIyc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgY2ggPSBzZWxmLnBlZWsobGVuZ3RoKQorICAgICAgICAgICAgICAgIGlmIGNoIGluICdcMCBcdFxyXG5ceDg1XHUyMDI4XHUyMDI5JyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBvciAoY2ggPT0gJzonIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlZWsobGVuZ3RoKzEpIGluICdcMCBcdFxyXG5ceDg1XHUyMDI4XHUyMDI5JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICh1JyxbXXt9JyBpZiBzZWxmLmZsb3dfbGV2ZWwgZWxzZSB1JycpKVwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIChzZWxmLmZsb3dfbGV2ZWwgYW5kIGNoIGluICcsP1tde30nKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMQorICAgICAgICAgICAgaWYgbGVuZ3RoID09IDA6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IEZhbHNlCisgICAgICAgICAgICBjaHVua3MuZXh0ZW5kKHNwYWNlcykKKyAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoc2VsZi5wcmVmaXgobGVuZ3RoKSkKKyAgICAgICAgICAgIHNlbGYuZm9yd2FyZChsZW5ndGgpCisgICAgICAgICAgICBlbmRfbWFyayA9IHNlbGYuZ2V0X21hcmsoKQorICAgICAgICAgICAgc3BhY2VzID0gc2VsZi5zY2FuX3BsYWluX3NwYWNlcyhpbmRlbnQsIHN0YXJ0X21hcmspCisgICAgICAgICAgICBpZiBub3Qgc3BhY2VzIG9yIHNlbGYucGVlaygpID09ICcjJyBcCisgICAgICAgICAgICAgICAgICAgIG9yIChub3Qgc2VsZi5mbG93X2xldmVsIGFuZCBzZWxmLmNvbHVtbiA8IGluZGVudCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIFNjYWxhclRva2VuKCcnLmpvaW4oY2h1bmtzKSwgVHJ1ZSwgc3RhcnRfbWFyaywgZW5kX21hcmspCisKKyAgICBkZWYgc2Nhbl9wbGFpbl9zcGFjZXMoc2VsZiwgaW5kZW50LCBzdGFydF9tYXJrKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgICMgVGhlIHNwZWNpZmljYXRpb24gaXMgcmVhbGx5IGNvbmZ1c2luZyBhYm91dCB0YWJzIGluIHBsYWluIHNjYWxhcnMuCisgICAgICAgICMgV2UganVzdCBmb3JiaWQgdGhlbSBjb21wbGV0ZWx5LiBEbyBub3QgdXNlIHRhYnMgaW4gWUFNTCEKKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgbGVuZ3RoID0gMAorICAgICAgICB3aGlsZSBzZWxmLnBlZWsobGVuZ3RoKSBpbiAnICc6CisgICAgICAgICAgICBsZW5ndGggKz0gMQorICAgICAgICB3aGl0ZXNwYWNlcyA9IHNlbGYucHJlZml4KGxlbmd0aCkKKyAgICAgICAgc2VsZi5mb3J3YXJkKGxlbmd0aCkKKyAgICAgICAgY2ggPSBzZWxmLnBlZWsoKQorICAgICAgICBpZiBjaCBpbiAnXHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgbGluZV9icmVhayA9IHNlbGYuc2Nhbl9saW5lX2JyZWFrKCkKKyAgICAgICAgICAgIHNlbGYuYWxsb3dfc2ltcGxlX2tleSA9IFRydWUKKyAgICAgICAgICAgIHByZWZpeCA9IHNlbGYucHJlZml4KDMpCisgICAgICAgICAgICBpZiAocHJlZml4ID09ICctLS0nIG9yIHByZWZpeCA9PSAnLi4uJykgICBcCisgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnBlZWsoMykgaW4gJ1wwIFx0XHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgYnJlYWtzID0gW10KKyAgICAgICAgICAgIHdoaWxlIHNlbGYucGVlaygpIGluICcgXHJcblx4ODVcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucGVlaygpID09ICcgJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVha3MuYXBwZW5kKHNlbGYuc2Nhbl9saW5lX2JyZWFrKCkpCisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHNlbGYucHJlZml4KDMpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXggPT0gJy0tLScgb3IgcHJlZml4ID09ICcuLi4nKSAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5wZWVrKDMpIGluICdcMCBcdFxyXG5ceDg1XHUyMDI4XHUyMDI5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbGluZV9icmVhayAhPSAnXG4nOgorICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQobGluZV9icmVhaykKKyAgICAgICAgICAgIGVsaWYgbm90IGJyZWFrczoKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKCcgJykKKyAgICAgICAgICAgIGNodW5rcy5leHRlbmQoYnJlYWtzKQorICAgICAgICBlbGlmIHdoaXRlc3BhY2VzOgorICAgICAgICAgICAgY2h1bmtzLmFwcGVuZCh3aGl0ZXNwYWNlcykKKyAgICAgICAgcmV0dXJuIGNodW5rcworCisgICAgZGVmIHNjYW5fdGFnX2hhbmRsZShzZWxmLCBuYW1lLCBzdGFydF9tYXJrKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgICMgRm9yIHNvbWUgc3RyYW5nZSByZWFzb25zLCB0aGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBhbGxvdyAnXycgaW4KKyAgICAgICAgIyB0YWcgaGFuZGxlcy4gSSBoYXZlIGFsbG93ZWQgaXQgYW55d2F5LgorICAgICAgICBjaCA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIGNoICE9ICchJzoKKyAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSAlcyIgJSBuYW1lLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJyEnLCBidXQgZm91bmQgJXIiICUgY2gsIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgbGVuZ3RoID0gMQorICAgICAgICBjaCA9IHNlbGYucGVlayhsZW5ndGgpCisgICAgICAgIGlmIGNoICE9ICcgJzoKKyAgICAgICAgICAgIHdoaWxlICcwJyA8PSBjaCA8PSAnOScgb3IgJ0EnIDw9IGNoIDw9ICdaJyBvciAnYScgPD0gY2ggPD0gJ3onICBcCisgICAgICAgICAgICAgICAgICAgIG9yIGNoIGluICctXyc6CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IDEKKyAgICAgICAgICAgICAgICBjaCA9IHNlbGYucGVlayhsZW5ndGgpCisgICAgICAgICAgICBpZiBjaCAhPSAnISc6CisgICAgICAgICAgICAgICAgc2VsZi5mb3J3YXJkKGxlbmd0aCkKKyAgICAgICAgICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgJXMiICUgbmFtZSwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAnIScsIGJ1dCBmb3VuZCAlciIgJSBjaCwgc2VsZi5nZXRfbWFyaygpKQorICAgICAgICAgICAgbGVuZ3RoICs9IDEKKyAgICAgICAgdmFsdWUgPSBzZWxmLnByZWZpeChsZW5ndGgpCisgICAgICAgIHNlbGYuZm9yd2FyZChsZW5ndGgpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHNjYW5fdGFnX3VyaShzZWxmLCBuYW1lLCBzdGFydF9tYXJrKToKKyAgICAgICAgIyBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgICAgICAgICMgTm90ZTogd2UgZG8gbm90IGNoZWNrIGlmIFVSSSBpcyB3ZWxsLWZvcm1lZC4KKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgbGVuZ3RoID0gMAorICAgICAgICBjaCA9IHNlbGYucGVlayhsZW5ndGgpCisgICAgICAgIHdoaWxlICcwJyA8PSBjaCA8PSAnOScgb3IgJ0EnIDw9IGNoIDw9ICdaJyBvciAnYScgPD0gY2ggPD0gJ3onICBcCisgICAgICAgICAgICAgICAgb3IgY2ggaW4gJy07Lz86QCY9KyQsXy4hfipcJygpW10lJzoKKyAgICAgICAgICAgIGlmIGNoID09ICclJzoKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHNlbGYucHJlZml4KGxlbmd0aCkpCisgICAgICAgICAgICAgICAgc2VsZi5mb3J3YXJkKGxlbmd0aCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSAwCisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChzZWxmLnNjYW5fdXJpX2VzY2FwZXMobmFtZSwgc3RhcnRfbWFyaykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxlbmd0aCArPSAxCisgICAgICAgICAgICBjaCA9IHNlbGYucGVlayhsZW5ndGgpCisgICAgICAgIGlmIGxlbmd0aDoKKyAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoc2VsZi5wcmVmaXgobGVuZ3RoKSkKKyAgICAgICAgICAgIHNlbGYuZm9yd2FyZChsZW5ndGgpCisgICAgICAgICAgICBsZW5ndGggPSAwCisgICAgICAgIGlmIG5vdCBjaHVua3M6CisgICAgICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoIndoaWxlIHBhcnNpbmcgYSAlcyIgJSBuYW1lLCBzdGFydF9tYXJrLAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgVVJJLCBidXQgZm91bmQgJXIiICUgY2gsIHNlbGYuZ2V0X21hcmsoKSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oY2h1bmtzKQorCisgICAgZGVmIHNjYW5fdXJpX2VzY2FwZXMoc2VsZiwgbmFtZSwgc3RhcnRfbWFyayk6CisgICAgICAgICMgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICBjb2RlcyA9IFtdCisgICAgICAgIG1hcmsgPSBzZWxmLmdldF9tYXJrKCkKKyAgICAgICAgd2hpbGUgc2VsZi5wZWVrKCkgPT0gJyUnOgorICAgICAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKDIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucGVlayhrKSBub3QgaW4gJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTY2FubmVyRXJyb3IoIndoaWxlIHNjYW5uaW5nIGEgJXMiICUgbmFtZSwgc3RhcnRfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgVVJJIGVzY2FwZSBzZXF1ZW5jZSBvZiAyIGhleGFkZWNpbWFsIG51bWJlcnMsIGJ1dCBmb3VuZCAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYucGVlayhrKSwgc2VsZi5nZXRfbWFyaygpKQorICAgICAgICAgICAgY29kZXMuYXBwZW5kKGludChzZWxmLnByZWZpeCgyKSwgMTYpKQorICAgICAgICAgICAgc2VsZi5mb3J3YXJkKDIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gYnl0ZXMoY29kZXMpLmRlY29kZSgndXRmLTgnKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFNjYW5uZXJFcnJvcigid2hpbGUgc2Nhbm5pbmcgYSAlcyIgJSBuYW1lLCBzdGFydF9tYXJrLCBzdHIoZXhjKSwgbWFyaykKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgc2Nhbl9saW5lX2JyZWFrKHNlbGYpOgorICAgICAgICAjIFRyYW5zZm9ybXM6CisgICAgICAgICMgICAnXHJcbicgICAgICA6ICAgJ1xuJworICAgICAgICAjICAgJ1xyJyAgICAgICAgOiAgICdcbicKKyAgICAgICAgIyAgICdcbicgICAgICAgIDogICAnXG4nCisgICAgICAgICMgICAnXHg4NScgICAgICA6ICAgJ1xuJworICAgICAgICAjICAgJ1x1MjAyOCcgICAgOiAgICdcdTIwMjgnCisgICAgICAgICMgICAnXHUyMDI5ICAgICA6ICAgJ1x1MjAyOScKKyAgICAgICAgIyAgIGRlZmF1bHQgICAgIDogICAnJworICAgICAgICBjaCA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIGNoIGluICdcclxuXHg4NSc6CisgICAgICAgICAgICBpZiBzZWxmLnByZWZpeCgyKSA9PSAnXHJcbic6CisgICAgICAgICAgICAgICAgc2VsZi5mb3J3YXJkKDIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZm9yd2FyZCgpCisgICAgICAgICAgICByZXR1cm4gJ1xuJworICAgICAgICBlbGlmIGNoIGluICdcdTIwMjhcdTIwMjknOgorICAgICAgICAgICAgc2VsZi5mb3J3YXJkKCkKKyAgICAgICAgICAgIHJldHVybiBjaAorICAgICAgICByZXR1cm4gJycKZGlmZiAtLWdpdCBhL2xpYi95YW1sL3NlcmlhbGl6ZXIucHkgYi9saWIveWFtbC9zZXJpYWxpemVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTExZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveWFtbC9zZXJpYWxpemVyLnB5CkBAIC0wLDAgKzEsMTExIEBACisKK19fYWxsX18gPSBbJ1NlcmlhbGl6ZXInLCAnU2VyaWFsaXplckVycm9yJ10KKworZnJvbSAuZXJyb3IgaW1wb3J0IFlBTUxFcnJvcgorZnJvbSAuZXZlbnRzIGltcG9ydCAqCitmcm9tIC5ub2RlcyBpbXBvcnQgKgorCitjbGFzcyBTZXJpYWxpemVyRXJyb3IoWUFNTEVycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFNlcmlhbGl6ZXI6CisKKyAgICBBTkNIT1JfVEVNUExBVEUgPSAnaWQlMDNkJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVuY29kaW5nPU5vbmUsCisgICAgICAgICAgICBleHBsaWNpdF9zdGFydD1Ob25lLCBleHBsaWNpdF9lbmQ9Tm9uZSwgdmVyc2lvbj1Ob25lLCB0YWdzPU5vbmUpOgorICAgICAgICBzZWxmLnVzZV9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgICAgIHNlbGYudXNlX2V4cGxpY2l0X3N0YXJ0ID0gZXhwbGljaXRfc3RhcnQKKyAgICAgICAgc2VsZi51c2VfZXhwbGljaXRfZW5kID0gZXhwbGljaXRfZW5kCisgICAgICAgIHNlbGYudXNlX3ZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgIHNlbGYudXNlX3RhZ3MgPSB0YWdzCisgICAgICAgIHNlbGYuc2VyaWFsaXplZF9ub2RlcyA9IHt9CisgICAgICAgIHNlbGYuYW5jaG9ycyA9IHt9CisgICAgICAgIHNlbGYubGFzdF9hbmNob3JfaWQgPSAwCisgICAgICAgIHNlbGYuY2xvc2VkID0gTm9uZQorCisgICAgZGVmIG9wZW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmVtaXQoU3RyZWFtU3RhcnRFdmVudChlbmNvZGluZz1zZWxmLnVzZV9lbmNvZGluZykpCisgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNlCisgICAgICAgIGVsaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBTZXJpYWxpemVyRXJyb3IoInNlcmlhbGl6ZXIgaXMgY2xvc2VkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFNlcmlhbGl6ZXJFcnJvcigic2VyaWFsaXplciBpcyBhbHJlYWR5IG9wZW5lZCIpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBTZXJpYWxpemVyRXJyb3IoInNlcmlhbGl6ZXIgaXMgbm90IG9wZW5lZCIpCisgICAgICAgIGVsaWYgbm90IHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5lbWl0KFN0cmVhbUVuZEV2ZW50KCkpCisgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKKworICAgICNkZWYgX19kZWxfXyhzZWxmKToKKyAgICAjICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIHNlcmlhbGl6ZShzZWxmLCBub2RlKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFNlcmlhbGl6ZXJFcnJvcigic2VyaWFsaXplciBpcyBub3Qgb3BlbmVkIikKKyAgICAgICAgZWxpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFNlcmlhbGl6ZXJFcnJvcigic2VyaWFsaXplciBpcyBjbG9zZWQiKQorICAgICAgICBzZWxmLmVtaXQoRG9jdW1lbnRTdGFydEV2ZW50KGV4cGxpY2l0PXNlbGYudXNlX2V4cGxpY2l0X3N0YXJ0LAorICAgICAgICAgICAgdmVyc2lvbj1zZWxmLnVzZV92ZXJzaW9uLCB0YWdzPXNlbGYudXNlX3RhZ3MpKQorICAgICAgICBzZWxmLmFuY2hvcl9ub2RlKG5vZGUpCisgICAgICAgIHNlbGYuc2VyaWFsaXplX25vZGUobm9kZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5lbWl0KERvY3VtZW50RW5kRXZlbnQoZXhwbGljaXQ9c2VsZi51c2VfZXhwbGljaXRfZW5kKSkKKyAgICAgICAgc2VsZi5zZXJpYWxpemVkX25vZGVzID0ge30KKyAgICAgICAgc2VsZi5hbmNob3JzID0ge30KKyAgICAgICAgc2VsZi5sYXN0X2FuY2hvcl9pZCA9IDAKKworICAgIGRlZiBhbmNob3Jfbm9kZShzZWxmLCBub2RlKToKKyAgICAgICAgaWYgbm9kZSBpbiBzZWxmLmFuY2hvcnM6CisgICAgICAgICAgICBpZiBzZWxmLmFuY2hvcnNbbm9kZV0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFuY2hvcnNbbm9kZV0gPSBzZWxmLmdlbmVyYXRlX2FuY2hvcihub2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hbmNob3JzW25vZGVdID0gTm9uZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBTZXF1ZW5jZU5vZGUpOgorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIG5vZGUudmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYW5jaG9yX25vZGUoaXRlbSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBNYXBwaW5nTm9kZSk6CisgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gbm9kZS52YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hbmNob3Jfbm9kZShrZXkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYW5jaG9yX25vZGUodmFsdWUpCisKKyAgICBkZWYgZ2VuZXJhdGVfYW5jaG9yKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLmxhc3RfYW5jaG9yX2lkICs9IDEKKyAgICAgICAgcmV0dXJuIHNlbGYuQU5DSE9SX1RFTVBMQVRFICUgc2VsZi5sYXN0X2FuY2hvcl9pZAorCisgICAgZGVmIHNlcmlhbGl6ZV9ub2RlKHNlbGYsIG5vZGUsIHBhcmVudCwgaW5kZXgpOgorICAgICAgICBhbGlhcyA9IHNlbGYuYW5jaG9yc1tub2RlXQorICAgICAgICBpZiBub2RlIGluIHNlbGYuc2VyaWFsaXplZF9ub2RlczoKKyAgICAgICAgICAgIHNlbGYuZW1pdChBbGlhc0V2ZW50KGFsaWFzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2VyaWFsaXplZF9ub2Rlc1tub2RlXSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuZGVzY2VuZF9yZXNvbHZlcihwYXJlbnQsIGluZGV4KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBTY2FsYXJOb2RlKToKKyAgICAgICAgICAgICAgICBkZXRlY3RlZF90YWcgPSBzZWxmLnJlc29sdmUoU2NhbGFyTm9kZSwgbm9kZS52YWx1ZSwgKFRydWUsIEZhbHNlKSkKKyAgICAgICAgICAgICAgICBkZWZhdWx0X3RhZyA9IHNlbGYucmVzb2x2ZShTY2FsYXJOb2RlLCBub2RlLnZhbHVlLCAoRmFsc2UsIFRydWUpKQorICAgICAgICAgICAgICAgIGltcGxpY2l0ID0gKG5vZGUudGFnID09IGRldGVjdGVkX3RhZyksIChub2RlLnRhZyA9PSBkZWZhdWx0X3RhZykKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoU2NhbGFyRXZlbnQoYWxpYXMsIG5vZGUudGFnLCBpbXBsaWNpdCwgbm9kZS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgc3R5bGU9bm9kZS5zdHlsZSkpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgU2VxdWVuY2VOb2RlKToKKyAgICAgICAgICAgICAgICBpbXBsaWNpdCA9IChub2RlLnRhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHNlbGYucmVzb2x2ZShTZXF1ZW5jZU5vZGUsIG5vZGUudmFsdWUsIFRydWUpKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdChTZXF1ZW5jZVN0YXJ0RXZlbnQoYWxpYXMsIG5vZGUudGFnLCBpbXBsaWNpdCwKKyAgICAgICAgICAgICAgICAgICAgZmxvd19zdHlsZT1ub2RlLmZsb3dfc3R5bGUpKQorICAgICAgICAgICAgICAgIGluZGV4ID0gMAorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIG5vZGUudmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsaXplX25vZGUoaXRlbSwgbm9kZSwgaW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoU2VxdWVuY2VFbmRFdmVudCgpKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE1hcHBpbmdOb2RlKToKKyAgICAgICAgICAgICAgICBpbXBsaWNpdCA9IChub2RlLnRhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHNlbGYucmVzb2x2ZShNYXBwaW5nTm9kZSwgbm9kZS52YWx1ZSwgVHJ1ZSkpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KE1hcHBpbmdTdGFydEV2ZW50KGFsaWFzLCBub2RlLnRhZywgaW1wbGljaXQsCisgICAgICAgICAgICAgICAgICAgIGZsb3dfc3R5bGU9bm9kZS5mbG93X3N0eWxlKSkKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBub2RlLnZhbHVlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbGl6ZV9ub2RlKGtleSwgbm9kZSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWxpemVfbm9kZSh2YWx1ZSwgbm9kZSwga2V5KQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdChNYXBwaW5nRW5kRXZlbnQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNjZW5kX3Jlc29sdmVyKCkKKwpkaWZmIC0tZ2l0IGEvbGliL3lhbWwvdG9rZW5zLnB5IGIvbGliL3lhbWwvdG9rZW5zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGI0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveWFtbC90b2tlbnMucHkKQEAgLTAsMCArMSwxMDQgQEAKKworY2xhc3MgVG9rZW4ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRfbWFyaywgZW5kX21hcmspOgorICAgICAgICBzZWxmLnN0YXJ0X21hcmsgPSBzdGFydF9tYXJrCisgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgYXR0cmlidXRlcyA9IFtrZXkgZm9yIGtleSBpbiBzZWxmLl9fZGljdF9fCisgICAgICAgICAgICAgICAgaWYgbm90IGtleS5lbmRzd2l0aCgnX21hcmsnKV0KKyAgICAgICAgYXR0cmlidXRlcy5zb3J0KCkKKyAgICAgICAgYXJndW1lbnRzID0gJywgJy5qb2luKFsnJXM9JXInICUgKGtleSwgZ2V0YXR0cihzZWxmLCBrZXkpKQorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gYXR0cmlidXRlc10pCisgICAgICAgIHJldHVybiAnJXMoJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXJndW1lbnRzKQorCisjY2xhc3MgQk9NVG9rZW4oVG9rZW4pOgorIyAgICBpZCA9ICc8Ynl0ZSBvcmRlciBtYXJrPicKKworY2xhc3MgRGlyZWN0aXZlVG9rZW4oVG9rZW4pOgorICAgIGlkID0gJzxkaXJlY3RpdmU+JworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB2YWx1ZSwgc3RhcnRfbWFyaywgZW5kX21hcmspOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLnN0YXJ0X21hcmsgPSBzdGFydF9tYXJrCisgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworCitjbGFzcyBEb2N1bWVudFN0YXJ0VG9rZW4oVG9rZW4pOgorICAgIGlkID0gJzxkb2N1bWVudCBzdGFydD4nCisKK2NsYXNzIERvY3VtZW50RW5kVG9rZW4oVG9rZW4pOgorICAgIGlkID0gJzxkb2N1bWVudCBlbmQ+JworCitjbGFzcyBTdHJlYW1TdGFydFRva2VuKFRva2VuKToKKyAgICBpZCA9ICc8c3RyZWFtIHN0YXJ0PicKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRfbWFyaz1Ob25lLCBlbmRfbWFyaz1Ob25lLAorICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworCitjbGFzcyBTdHJlYW1FbmRUb2tlbihUb2tlbik6CisgICAgaWQgPSAnPHN0cmVhbSBlbmQ+JworCitjbGFzcyBCbG9ja1NlcXVlbmNlU3RhcnRUb2tlbihUb2tlbik6CisgICAgaWQgPSAnPGJsb2NrIHNlcXVlbmNlIHN0YXJ0PicKKworY2xhc3MgQmxvY2tNYXBwaW5nU3RhcnRUb2tlbihUb2tlbik6CisgICAgaWQgPSAnPGJsb2NrIG1hcHBpbmcgc3RhcnQ+JworCitjbGFzcyBCbG9ja0VuZFRva2VuKFRva2VuKToKKyAgICBpZCA9ICc8YmxvY2sgZW5kPicKKworY2xhc3MgRmxvd1NlcXVlbmNlU3RhcnRUb2tlbihUb2tlbik6CisgICAgaWQgPSAnWycKKworY2xhc3MgRmxvd01hcHBpbmdTdGFydFRva2VuKFRva2VuKToKKyAgICBpZCA9ICd7JworCitjbGFzcyBGbG93U2VxdWVuY2VFbmRUb2tlbihUb2tlbik6CisgICAgaWQgPSAnXScKKworY2xhc3MgRmxvd01hcHBpbmdFbmRUb2tlbihUb2tlbik6CisgICAgaWQgPSAnfScKKworY2xhc3MgS2V5VG9rZW4oVG9rZW4pOgorICAgIGlkID0gJz8nCisKK2NsYXNzIFZhbHVlVG9rZW4oVG9rZW4pOgorICAgIGlkID0gJzonCisKK2NsYXNzIEJsb2NrRW50cnlUb2tlbihUb2tlbik6CisgICAgaWQgPSAnLScKKworY2xhc3MgRmxvd0VudHJ5VG9rZW4oVG9rZW4pOgorICAgIGlkID0gJywnCisKK2NsYXNzIEFsaWFzVG9rZW4oVG9rZW4pOgorICAgIGlkID0gJzxhbGlhcz4nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCBzdGFydF9tYXJrLCBlbmRfbWFyayk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLnN0YXJ0X21hcmsgPSBzdGFydF9tYXJrCisgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworCitjbGFzcyBBbmNob3JUb2tlbihUb2tlbik6CisgICAgaWQgPSAnPGFuY2hvcj4nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCBzdGFydF9tYXJrLCBlbmRfbWFyayk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLnN0YXJ0X21hcmsgPSBzdGFydF9tYXJrCisgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworCitjbGFzcyBUYWdUb2tlbihUb2tlbik6CisgICAgaWQgPSAnPHRhZz4nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCBzdGFydF9tYXJrLCBlbmRfbWFyayk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLnN0YXJ0X21hcmsgPSBzdGFydF9tYXJrCisgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworCitjbGFzcyBTY2FsYXJUb2tlbihUb2tlbik6CisgICAgaWQgPSAnPHNjYWxhcj4nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCBwbGFpbiwgc3RhcnRfbWFyaywgZW5kX21hcmssIHN0eWxlPU5vbmUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgc2VsZi5wbGFpbiA9IHBsYWluCisgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisgICAgICAgIHNlbGYuc3R5bGUgPSBzdHlsZQorCmRpZmYgLS1naXQgYS9wYWNrYWdpbmcvYnVpbGQvbGlieWFtbC5zaCBiL3BhY2thZ2luZy9idWlsZC9saWJ5YW1sLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzM2NmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdpbmcvYnVpbGQvbGlieWFtbC5zaApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vYmFzaAorCitzZXQgLWV1eAorCisjIGJ1aWxkIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiBvZiBsaWJ5YW1sIGxvY2FsbHkKK2VjaG8gIjo6Z3JvdXA6OmZldGNoIGxpYnlhbWwgJHtMSUJZQU1MX1JFRn0iCitnaXQgY29uZmlnIC0tZ2xvYmFsIGFkdmljZS5kZXRhY2hlZEhlYWQgZmFsc2UKK2dpdCBjbG9uZSAtLWJyYW5jaCAiJExJQllBTUxfUkVGIiAiJExJQllBTUxfUkVQTyIgbGlieWFtbAorcHVzaGQgbGlieWFtbAorZ2l0IHJlc2V0IC0taGFyZCAiJExJQllBTUxfUkVGIgorZWNobyAiOjplbmRncm91cDo6IgorCitlY2hvICI6Omdyb3VwOjphdXRvY29uZiBsaWJ5YW1sIHcvIHN0YXRpYyBvbmx5IgorLi9ib290c3RyYXAKKyMgYnVpbGQgb25seSBhIHN0YXRpYyBsaWJyYXJ5LSByZWR1Y2VzIG91ciByZWxpYW5jZSBvbiBhdWRpdHdoZWVsL2RlbG9jYXRlIG1hZ2ljCisuL2NvbmZpZ3VyZSAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAtLXdpdGgtcGljIC0tZW5hYmxlLXNoYXJlZD1ubworZWNobyAiOjplbmRncm91cDo6IgorCitlY2hvICI6Omdyb3VwOjpidWlsZCBsaWJ5YW1sIgorbWFrZQorZWNobyAiOjplbmRncm91cDo6IgorCitlY2hvICI6Omdyb3VwOjp0ZXN0IGJ1aWx0IGxpYnlhbWwiCittYWtlIHRlc3QtYWxsCitlY2hvICI6OmVuZGdyb3VwOjoiCitwb3BkCmRpZmYgLS1naXQgYS9wYWNrYWdpbmcvYnVpbGQvc21va2V0ZXN0LnB5IGIvcGFja2FnaW5nL2J1aWxkL3Ntb2tldGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDc5OWNlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnaW5nL2J1aWxkL3Ntb2tldGVzdC5weQpAQCAtMCwwICsxLDIyIEBACitpbXBvcnQgc3lzCitpbXBvcnQgeWFtbAorCisKK2RlZiBtYWluKCk6CisgICAgIyB2YXJpb3VzIHNtb2tlIHRlc3RzIG9uIGFuIGluc3RhbGxlZCBQeVlBTUwgd2l0aCBleHRlbnNpb24KKyAgICBpZiBub3QgZ2V0YXR0cih5YW1sLCAnX3lhbWwnLCBOb25lKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDIGV4dGVuc2lvbiBpcyBub3QgYXZhaWxhYmxlIGF0IGB5YW1sLl95YW1sYCcpCisKKyAgICBwcmludCgnZW1iZWRkZWQgbGlieWFtbCB2ZXJzaW9uIGlzIHswfScuZm9ybWF0KHlhbWwuX3lhbWwuZ2V0X3ZlcnNpb25fc3RyaW5nKCkpKQorCisgICAgZm9yIGxvYWRlciwgZHVtcGVyIGluIFsoeWFtbC5DTG9hZGVyLCB5YW1sLkNEdW1wZXIpLCAoeWFtbC5Mb2FkZXIsIHlhbWwuRHVtcGVyKV06CisgICAgICAgIHRlc3R5YW1sID0gJ2R1ZGU6IG1hcicKKyAgICAgICAgbG9hZGVkID0geWFtbC5sb2FkKHRlc3R5YW1sLCBMb2FkZXI9bG9hZGVyKQorICAgICAgICBkdW1wZWQgPSB5YW1sLmR1bXAobG9hZGVkLCBEdW1wZXI9ZHVtcGVyKQorICAgICAgICBpZiB0ZXN0eWFtbCAhPSBkdW1wZWQuc3RyaXAoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigncm91bmR0cmlwIGZhaWxlZCB3aXRoIHswfS97MX0nLmZvcm1hdChsb2FkZXIsIGR1bXBlcikpCisgICAgcHJpbnQoJ3Ntb2tlIHRlc3QgcGFzc2VkIGZvciB7MH0nLmZvcm1hdChzeXMuZXhlY3V0YWJsZSkpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9weXByb2plY3QudG9tbCBiL3B5cHJvamVjdC50b21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjVlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9weXByb2plY3QudG9tbApAQCAtMCwwICsxLDMgQEAKK1tidWlsZC1zeXN0ZW1dCityZXF1aXJlcyA9IFsic2V0dXB0b29scyIsICJ3aGVlbCIsICJDeXRob24iXQorYnVpbGQtYmFja2VuZCA9ICJzZXR1cHRvb2xzLmJ1aWxkX21ldGEiCmRpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0OGIxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9zZXR1cC5weQpAQCAtMCwwICsxLDMxMyBAQAorCitOQU1FID0gJ1B5WUFNTCcKK1ZFUlNJT04gPSAnNi4wJworREVTQ1JJUFRJT04gPSAiWUFNTCBwYXJzZXIgYW5kIGVtaXR0ZXIgZm9yIFB5dGhvbiIKK0xPTkdfREVTQ1JJUFRJT04gPSAiIiJcCitZQU1MIGlzIGEgZGF0YSBzZXJpYWxpemF0aW9uIGZvcm1hdCBkZXNpZ25lZCBmb3IgaHVtYW4gcmVhZGFiaWxpdHkKK2FuZCBpbnRlcmFjdGlvbiB3aXRoIHNjcmlwdGluZyBsYW5ndWFnZXMuICBQeVlBTUwgaXMgYSBZQU1MIHBhcnNlcgorYW5kIGVtaXR0ZXIgZm9yIFB5dGhvbi4KKworUHlZQU1MIGZlYXR1cmVzIGEgY29tcGxldGUgWUFNTCAxLjEgcGFyc2VyLCBVbmljb2RlIHN1cHBvcnQsIHBpY2tsZQorc3VwcG9ydCwgY2FwYWJsZSBleHRlbnNpb24gQVBJLCBhbmQgc2Vuc2libGUgZXJyb3IgbWVzc2FnZXMuICBQeVlBTUwKK3N1cHBvcnRzIHN0YW5kYXJkIFlBTUwgdGFncyBhbmQgcHJvdmlkZXMgUHl0aG9uLXNwZWNpZmljIHRhZ3MgdGhhdAorYWxsb3cgdG8gcmVwcmVzZW50IGFuIGFyYml0cmFyeSBQeXRob24gb2JqZWN0LgorCitQeVlBTUwgaXMgYXBwbGljYWJsZSBmb3IgYSBicm9hZCByYW5nZSBvZiB0YXNrcyBmcm9tIGNvbXBsZXgKK2NvbmZpZ3VyYXRpb24gZmlsZXMgdG8gb2JqZWN0IHNlcmlhbGl6YXRpb24gYW5kIHBlcnNpc3RlbmNlLiIiIgorQVVUSE9SID0gIktpcmlsbCBTaW1vbm92IgorQVVUSE9SX0VNQUlMID0gJ3hpQHJlc29sdmVudC5uZXQnCitMSUNFTlNFID0gIk1JVCIKK1BMQVRGT1JNUyA9ICJBbnkiCitVUkwgPSAiaHR0cHM6Ly9weXlhbWwub3JnLyIKK0RPV05MT0FEX1VSTCA9ICJodHRwczovL3B5cGkub3JnL3Byb2plY3QvUHlZQU1MLyIKK0NMQVNTSUZJRVJTID0gWworICAgICJEZXZlbG9wbWVudCBTdGF0dXMgOjogNSAtIFByb2R1Y3Rpb24vU3RhYmxlIiwKKyAgICAiSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycyIsCisgICAgIkxpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlIiwKKyAgICAiT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCIsCisgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IEN5dGhvbiIsCisgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiIsCisgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzIiwKKyAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNiIsCisgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjciLAorICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy44IiwKKyAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuOSIsCisgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjEwIiwKKyAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IEltcGxlbWVudGF0aW9uIDo6IENQeXRob24iLAorICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogSW1wbGVtZW50YXRpb24gOjogUHlQeSIsCisgICAgIlRvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcyIsCisgICAgIlRvcGljIDo6IFRleHQgUHJvY2Vzc2luZyA6OiBNYXJrdXAiLAorXQorUFJPSkVDVF9VUkxTID0geworICAgJ0J1ZyBUcmFja2VyJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9pc3N1ZXMnLAorICAgJ0NJJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbC9hY3Rpb25zJywKKyAgICdEb2N1bWVudGF0aW9uJzogJ2h0dHBzOi8vcHl5YW1sLm9yZy93aWtpL1B5WUFNTERvY3VtZW50YXRpb24nLAorICAgJ01haWxpbmcgbGlzdHMnOiAnaHR0cDovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby95YW1sLWNvcmUnLAorICAgJ1NvdXJjZSBDb2RlJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS95YW1sL3B5eWFtbCcsCit9CisKK0xJQllBTUxfQ0hFQ0sgPSAiIiIKKyNpbmNsdWRlIDx5YW1sLmg+CisKK2ludCBtYWluKHZvaWQpIHsKKyAgICB5YW1sX3BhcnNlcl90IHBhcnNlcjsKKyAgICB5YW1sX2VtaXR0ZXJfdCBlbWl0dGVyOworCisgICAgeWFtbF9wYXJzZXJfaW5pdGlhbGl6ZSgmcGFyc2VyKTsKKyAgICB5YW1sX3BhcnNlcl9kZWxldGUoJnBhcnNlcik7CisKKyAgICB5YW1sX2VtaXR0ZXJfaW5pdGlhbGl6ZSgmZW1pdHRlcik7CisgICAgeWFtbF9lbWl0dGVyX2RlbGV0ZSgmZW1pdHRlcik7CisKKyAgICByZXR1cm4gMDsKK30KKyIiIgorCisKK2ltcG9ydCBzeXMsIG9zLCBvcy5wYXRoLCBwYXRobGliLCBwbGF0Zm9ybSwgc2h1dGlsLCB0ZW1wZmlsZSwgd2FybmluZ3MKKworIyBmb3IgbmV3ZXIgc2V0dXB0b29scywgZW5hYmxlIHRoZSBlbWJlZGRlZCBkaXN0dXRpbHMgYmVmb3JlIGltcG9ydGluZyBzZXR1cHRvb2xzL2Rpc3R1dGlscyB0byBhdm9pZCB3YXJuaW5ncworb3MuZW52aXJvblsnU0VUVVBUT09MU19VU0VfRElTVFVUSUxTJ10gPSAnbG9jYWwnCisKK2Zyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIENvbW1hbmQsIERpc3RyaWJ1dGlvbiBhcyBfRGlzdHJpYnV0aW9uLCBFeHRlbnNpb24gYXMgX0V4dGVuc2lvbgorZnJvbSBzZXR1cHRvb2xzLmNvbW1hbmQuYnVpbGRfZXh0IGltcG9ydCBidWlsZF9leHQgYXMgX2J1aWxkX2V4dAorIyBOQjogZGlzdHV0aWxzIGltcG9ydHMgbXVzdCByZW1haW4gYmVsb3cgc2V0dXB0b29scyB0byBlbnN1cmUgd2UgdXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0Vycm9yLCBDb21waWxlRXJyb3IsIExpbmtFcnJvciwgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgorCit3aXRoX2N5dGhvbiA9IEZhbHNlCitpZiAnc2Rpc3QnIGluIHN5cy5hcmd2IG9yIG9zLmVudmlyb24uZ2V0KCdQWVlBTUxfRk9SQ0VfQ1lUSE9OJykgPT0gJzEnOgorICAgICMgd2UgbmVlZCBjeXRob24gaGVyZQorICAgIHdpdGhfY3l0aG9uID0gVHJ1ZQordHJ5OgorICAgIGZyb20gQ3l0aG9uLkRpc3R1dGlscy5leHRlbnNpb24gaW1wb3J0IEV4dGVuc2lvbiBhcyBfRXh0ZW5zaW9uCisgICAgZnJvbSBDeXRob24uRGlzdHV0aWxzIGltcG9ydCBidWlsZF9leHQgYXMgX2J1aWxkX2V4dAorICAgIHdpdGhfY3l0aG9uID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGlmIHdpdGhfY3l0aG9uOgorICAgICAgICByYWlzZQorCit0cnk6CisgICAgZnJvbSB3aGVlbC5iZGlzdF93aGVlbCBpbXBvcnQgYmRpc3Rfd2hlZWwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBiZGlzdF93aGVlbCA9IE5vbmUKKworCisjIG9uIFdpbmRvd3MsIGRpc2FibGUgd2hlZWwgZ2VuZXJhdGlvbiB3YXJuaW5nIG5vaXNlCit3aW5kb3dzX2lnbm9yZV93YXJuaW5ncyA9IFsKKyJVbmtub3duIGRpc3RyaWJ1dGlvbiBvcHRpb246ICdweXRob25fcmVxdWlyZXMnIiwKKyJDb25maWcgdmFyaWFibGUgJ1B5X0RFQlVHJyBpcyB1bnNldCIsCisiQ29uZmlnIHZhcmlhYmxlICdXSVRIX1BZTUFMTE9DJyBpcyB1bnNldCIsCisiQ29uZmlnIHZhcmlhYmxlICdQeV9VTklDT0RFX1NJWkUnIGlzIHVuc2V0IiwKKyJDeXRob24gZGlyZWN0aXZlICdsYW5ndWFnZV9sZXZlbCcgbm90IHNldCIKK10KKworaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnOgorICAgIGZvciB3IGluIHdpbmRvd3NfaWdub3JlX3dhcm5pbmdzOgorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywgdykKKworCitjbGFzcyBEaXN0cmlidXRpb24oX0Rpc3RyaWJ1dGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHJzPU5vbmUpOgorICAgICAgICBfRGlzdHJpYnV0aW9uLl9faW5pdF9fKHNlbGYsIGF0dHJzKQorICAgICAgICBpZiBub3Qgc2VsZi5leHRfbW9kdWxlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbihzZWxmLmV4dF9tb2R1bGVzKS0xLCAtMSwgLTEpOgorICAgICAgICAgICAgZXh0ID0gc2VsZi5leHRfbW9kdWxlc1tpZHhdCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleHQsIEV4dGVuc2lvbik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgZXh0LmF0dHJfbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuZ2xvYmFsX29wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgICAgIChleHQub3B0aW9uX25hbWUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSAlcyAoZGVmYXVsdCBpZiAlcyBpcyBhdmFpbGFibGUpIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXh0LmZlYXR1cmVfZGVzY3JpcHRpb24sIGV4dC5mZWF0dXJlX25hbWUpKSwKKyAgICAgICAgICAgICAgICAgICAgKGV4dC5uZWdfb3B0aW9uX25hbWUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVkZSAlcyIgJSBleHQuZmVhdHVyZV9kZXNjcmlwdGlvbiksCisgICAgICAgICAgICBdICsgc2VsZi5nbG9iYWxfb3B0aW9ucworICAgICAgICAgICAgc2VsZi5uZWdhdGl2ZV9vcHQgPSBzZWxmLm5lZ2F0aXZlX29wdC5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYubmVnYXRpdmVfb3B0W2V4dC5uZWdfb3B0aW9uX25hbWVdID0gZXh0Lm9wdGlvbl9uYW1lCisKKyAgICBkZWYgaGFzX2V4dF9tb2R1bGVzKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5leHRfbW9kdWxlczoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgZXh0IGluIHNlbGYuZXh0X21vZHVsZXM6CisgICAgICAgICAgICB3aXRoX2V4dCA9IHNlbGYuZXh0X3N0YXR1cyhleHQpCisgICAgICAgICAgICBpZiB3aXRoX2V4dCBpcyBOb25lIG9yIHdpdGhfZXh0OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGV4dF9zdGF0dXMoc2VsZiwgZXh0KToKKyAgICAgICAgaW1wbGVtZW50YXRpb24gPSBwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKQorICAgICAgICBpZiBpbXBsZW1lbnRhdGlvbiBub3QgaW4gWydDUHl0aG9uJywgJ1B5UHknXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBpc2luc3RhbmNlKGV4dCwgRXh0ZW5zaW9uKToKKyAgICAgICAgICAgICMgdGhlICJidWlsZCBieSBkZWZhdWx0IiBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBieSB0aGlzIHJldHVybmluZyBOb25lCisgICAgICAgICAgICB3aXRoX2V4dCA9IGdldGF0dHIoc2VsZiwgZXh0LmF0dHJfbmFtZSkgb3Igb3MuZW52aXJvbi5nZXQoJ1BZWUFNTF9GT1JDRV97MH0nLmZvcm1hdChleHQuZmVhdHVyZV9uYW1lLnVwcGVyKCkpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGhfZXh0ID0gaW50KHdpdGhfZXh0KSAgIyBhdHRlbXB0IGNvZXJjZSBlbnZ2YXIgdG8gaW50CisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiB3aXRoX2V4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBFeHRlbnNpb24oX0V4dGVuc2lvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc291cmNlcywgZmVhdHVyZV9uYW1lLCBmZWF0dXJlX2Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgZmVhdHVyZV9jaGVjaywgKiprd2RzKToKKyAgICAgICAgaWYgbm90IHdpdGhfY3l0aG9uOgorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNvdXJjZXNbOl06CisgICAgICAgICAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBleHQgPT0gJy5weXgnOgorICAgICAgICAgICAgICAgICAgICBzb3VyY2VzLnJlbW92ZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlcy5hcHBlbmQoJyVzLmMnICUgYmFzZSkKKyAgICAgICAgX0V4dGVuc2lvbi5fX2luaXRfXyhzZWxmLCBuYW1lLCBzb3VyY2VzLCAqKmt3ZHMpCisgICAgICAgIHNlbGYuZmVhdHVyZV9uYW1lID0gZmVhdHVyZV9uYW1lCisgICAgICAgIHNlbGYuZmVhdHVyZV9kZXNjcmlwdGlvbiA9IGZlYXR1cmVfZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5mZWF0dXJlX2NoZWNrID0gZmVhdHVyZV9jaGVjaworICAgICAgICBzZWxmLmF0dHJfbmFtZSA9ICd3aXRoXycgKyBmZWF0dXJlX25hbWUucmVwbGFjZSgnLScsICdfJykKKyAgICAgICAgc2VsZi5vcHRpb25fbmFtZSA9ICd3aXRoLScgKyBmZWF0dXJlX25hbWUKKyAgICAgICAgc2VsZi5uZWdfb3B0aW9uX25hbWUgPSAnd2l0aG91dC0nICsgZmVhdHVyZV9uYW1lCisKKworY2xhc3MgYnVpbGRfZXh0KF9idWlsZF9leHQpOgorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgb3B0aW9uYWwgPSBUcnVlCisgICAgICAgIGRpc2FibGVkID0gVHJ1ZQorICAgICAgICBmb3IgZXh0IGluIHNlbGYuZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIHdpdGhfZXh0ID0gc2VsZi5kaXN0cmlidXRpb24uZXh0X3N0YXR1cyhleHQpCisgICAgICAgICAgICBpZiB3aXRoX2V4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRpc2FibGVkID0gRmFsc2UKKyAgICAgICAgICAgIGVsaWYgd2l0aF9leHQ6CisgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBGYWxzZQorICAgICAgICAgICAgICAgIGRpc2FibGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBkaXNhYmxlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfYnVpbGRfZXh0LnJ1bihzZWxmKQorICAgICAgICBleGNlcHQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcjoKKyAgICAgICAgICAgIGV4YyA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICBsb2cud2FybihzdHIoZXhjKSkKKyAgICAgICAgICAgICAgICBsb2cud2Fybigic2tpcHBpbmcgYnVpbGRfZXh0IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBnZXRfc291cmNlX2ZpbGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2V4dGVuc2lvbnNfbGlzdChzZWxmLmV4dGVuc2lvbnMpCisgICAgICAgIGZpbGVuYW1lcyA9IFtdCisgICAgICAgIGZvciBleHQgaW4gc2VsZi5leHRlbnNpb25zOgorICAgICAgICAgICAgaWYgd2l0aF9jeXRob246CisgICAgICAgICAgICAgICAgc2VsZi5jeXRob25fc291cmNlcyhleHQuc291cmNlcywgZXh0KQorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGV4dC5zb3VyY2VzOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdCisgICAgICAgICAgICAgICAgZm9yIGV4dCBpbiBbJ2MnLCAnaCcsICdweXgnLCAncHhkJ106CisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gJyVzLiVzJyAlIChiYXNlLCBleHQpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiBmaWxlbmFtZXMgYW5kIG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBmaWxlbmFtZXMKKworICAgIGRlZiBnZXRfb3V0cHV0cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19leHRlbnNpb25zX2xpc3Qoc2VsZi5leHRlbnNpb25zKQorICAgICAgICBvdXRwdXRzID0gW10KKyAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnM6CisgICAgICAgICAgICBmdWxsbmFtZSA9IHNlbGYuZ2V0X2V4dF9mdWxsbmFtZShleHQubmFtZSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfZXh0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIG91dHB1dHMKKworICAgIGRlZiBidWlsZF9leHRlbnNpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2V4dGVuc2lvbnNfbGlzdChzZWxmLmV4dGVuc2lvbnMpCisgICAgICAgIGZvciBleHQgaW4gc2VsZi5leHRlbnNpb25zOgorICAgICAgICAgICAgd2l0aF9leHQgPSBzZWxmLmRpc3RyaWJ1dGlvbi5leHRfc3RhdHVzKGV4dCkKKyAgICAgICAgICAgIGlmIHdpdGhfZXh0IGlzIG5vdCBOb25lIGFuZCBub3Qgd2l0aF9leHQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHdpdGhfY3l0aG9uOgorICAgICAgICAgICAgICAgIGV4dC5zb3VyY2VzID0gc2VsZi5jeXRob25fc291cmNlcyhleHQuc291cmNlcywgZXh0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfZXh0ZW5zaW9uKGV4dCkKKyAgICAgICAgICAgIGV4Y2VwdCAoQ29tcGlsZUVycm9yLCBMaW5rRXJyb3IpOgorICAgICAgICAgICAgICAgIGlmIHdpdGhfZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGxvZy53YXJuKCJFcnJvciBjb21waWxpbmcgbW9kdWxlLCBmYWxsaW5nIGJhY2sgdG8gcHVyZSBQeXRob24iKQorCisKK2NsYXNzIHRlc3QoQ29tbWFuZCk6CisKKyAgICB1c2VyX29wdGlvbnMgPSBbXQorCisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCisgICAgICAgIGJ1aWxkX2NtZC5ydW4oKQorCisgICAgICAgICMgcnVubmluZyB0aGUgdGVzdHMgdGhpcyB3YXkgY2FuIHBvbGx1dGUgdGhlIHBvc3QtTUFOSUZFU1QgYnVpbGQgc291cmNlcworICAgICAgICAjIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3lhbWwvcHl5YW1sL2lzc3Vlcy81MjcjaXNzdWVjb21tZW50LTkyMTA1ODM0NCkKKyAgICAgICAgIyB1bnRpbCB3ZSByZW1vdmUgdGhlIHRlc3QgY29tbWFuZCwgcnVuIHRlc3RzIGZyb20gYW4gZXBoZW1lcmFsIGNvcHkgb2YgdGhlIGludGVybWVkaWF0ZSBidWlsZCBzb3VyY2VzCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkocHJlZml4PSd0ZXN0X3B5eWFtbCcpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBoYXZlIHRvIGNyZWF0ZSBhIHN1YmRpciBzaW5jZSB3ZSBkb24ndCBnZXQgZGlyX2V4aXN0c19vayBvbiBjb3B5dHJlZSB1bnRpbCAzLjgKKyAgICAgICAgICAgIHRlbXBfdGVzdF9wYXRoID0gcGF0aGxpYi5QYXRoKHRlbXBkaXIubmFtZSkgLyAncHl5YW1sJworICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKGJ1aWxkX2NtZC5idWlsZF9saWIsIHRlbXBfdGVzdF9wYXRoKQorICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHN0cih0ZW1wX3Rlc3RfcGF0aCkpCisgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgJ3Rlc3RzL2xpYicpCisKKyAgICAgICAgICAgIGltcG9ydCB0ZXN0X2FsbAorICAgICAgICAgICAgaWYgbm90IHRlc3RfYWxsLm1haW4oW10pOgorICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0Vycm9yKCJUZXN0cyBmYWlsZWQiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgdGhpcyBjYW4gZmFpbCB1bmRlciBXaW5kb3dzOyBiZXN0LWVmZm9ydCBjbGVhbnVwCisgICAgICAgICAgICAgICAgdGVtcGRpci5jbGVhbnVwKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworCisKK2NtZGNsYXNzID0geworICAgICdidWlsZF9leHQnOiBidWlsZF9leHQsCisgICAgJ3Rlc3QnOiB0ZXN0LAorfQoraWYgYmRpc3Rfd2hlZWw6CisgICAgY21kY2xhc3NbJ2JkaXN0X3doZWVsJ10gPSBiZGlzdF93aGVlbAorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisKKyAgICBzZXR1cCgKKyAgICAgICAgbmFtZT1OQU1FLAorICAgICAgICB2ZXJzaW9uPVZFUlNJT04sCisgICAgICAgIGRlc2NyaXB0aW9uPURFU0NSSVBUSU9OLAorICAgICAgICBsb25nX2Rlc2NyaXB0aW9uPUxPTkdfREVTQ1JJUFRJT04sCisgICAgICAgIGF1dGhvcj1BVVRIT1IsCisgICAgICAgIGF1dGhvcl9lbWFpbD1BVVRIT1JfRU1BSUwsCisgICAgICAgIGxpY2Vuc2U9TElDRU5TRSwKKyAgICAgICAgcGxhdGZvcm1zPVBMQVRGT1JNUywKKyAgICAgICAgdXJsPVVSTCwKKyAgICAgICAgZG93bmxvYWRfdXJsPURPV05MT0FEX1VSTCwKKyAgICAgICAgY2xhc3NpZmllcnM9Q0xBU1NJRklFUlMsCisgICAgICAgIHByb2plY3RfdXJscz1QUk9KRUNUX1VSTFMsCisKKyAgICAgICAgcGFja2FnZV9kaXI9eycnOiAnbGliJ30sCisgICAgICAgIHBhY2thZ2VzPVsneWFtbCcsICdfeWFtbCddLAorICAgICAgICBleHRfbW9kdWxlcz1bCisgICAgICAgICAgICBFeHRlbnNpb24oJ3lhbWwuX3lhbWwnLCBbJ3lhbWwvX3lhbWwucHl4J10sCisgICAgICAgICAgICAgICAgJ2xpYnlhbWwnLCAiTGliWUFNTCBiaW5kaW5ncyIsIExJQllBTUxfQ0hFQ0ssCisgICAgICAgICAgICAgICAgbGlicmFyaWVzPVsneWFtbCddKSwKKyAgICAgICAgXSwKKworICAgICAgICBkaXN0Y2xhc3M9RGlzdHJpYnV0aW9uLAorICAgICAgICBjbWRjbGFzcz1jbWRjbGFzcywKKyAgICAgICAgcHl0aG9uX3JlcXVpcmVzPSc+PTMuNicsCisgICAgKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9hLW5hc3R5LWxpYnlhbWwtYnVnLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvYS1uYXN0eS1saWJ5YW1sLWJ1Zy5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3ZDQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvYS1uYXN0eS1saWJ5YW1sLWJ1Zy5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorWyBbClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9hbGlhc2VzLWNkdW1wZXItYnVnLmNvZGUgYi90ZXN0cy9kYXRhL2FsaWFzZXMtY2R1bXBlci1idWcuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTY4NDQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9hbGlhc2VzLWNkdW1wZXItYnVnLmNvZGUKQEAgLTAsMCArMSBAQAorWyB0b2RheSwgdG9kYXkgXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9hbGlhc2VzLmV2ZW50cyBiL3Rlc3RzL2RhdGEvYWxpYXNlcy5ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzOWI1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvYWxpYXNlcy5ldmVudHMKQEAgLTAsMCArMSw4IEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydAorLSAhU2VxdWVuY2VTdGFydAorLSAhU2NhbGFyIHsgYW5jaG9yOiAnbXlhbmNob3InLCB0YWc6ICchbXl0YWcnLCB2YWx1ZTogJ2RhdGEnIH0KKy0gIUFsaWFzIHsgYW5jaG9yOiAnbXlhbmNob3InIH0KKy0gIVNlcXVlbmNlRW5kCistICFEb2N1bWVudEVuZAorLSAhU3RyZWFtRW5kCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2Jvb2wuZGF0YSBiL3Rlc3RzL2RhdGEvYm9vbC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ODhiNjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2Jvb2wuZGF0YQpAQCAtMCwwICsxLDQgQEAKKy0geWVzCistIE5PCistIFRydWUKKy0gb24KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvYm9vbC5kZXRlY3QgYi90ZXN0cy9kYXRhL2Jvb2wuZGV0ZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2ViYmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2Jvb2wuZGV0ZWN0CkBAIC0wLDAgKzEgQEAKK3RhZzp5YW1sLm9yZywyMDAyOmJvb2wKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LWJpbmFyeS1weTIuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWJpbmFyeS1weTIuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2FjMGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYmluYXJ5LXB5Mi5jb2RlCkBAIC0wLDAgKzEsNyBAQAoreworICAgICJjYW5vbmljYWwiOgorICAgICAgICAiR0lGODlhXHgwY1x4MDBceDBjXHgwMFx4ODRceDAwXHgwMFx4ZmZceGZmXHhmN1x4ZjVceGY1XHhlZVx4ZTlceGU5XHhlNWZmZlx4MDBceDAwXHgwMFx4ZTdceGU3XHhlN15eXlx4ZjNceGYzXHhlZFx4OGVceDhlXHg4ZVx4ZTBceGUwXHhlMFx4OWZceDlmXHg5Zlx4OTNceDkzXHg5M1x4YTdceGE3XHhhN1x4OWVceDllXHg5ZWlpaWNjY1x4YTNceGEzXHhhM1x4ODRceDg0XHg4NFx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOSFceGZlXHgwZU1hZGUgd2l0aCBHSU1QXHgwMCxceDAwXHgwMFx4MDBceDAwXHgwY1x4MDBceDBjXHgwMFx4MDBceDA1LCAgXHg4ZVx4ODEwXHg5ZVx4ZTNAXHgxNFx4ZThpXHgxMFx4YzRceGQxXHg4YVx4MDhceDFjXHhjZlx4ODBNJHpceGVmXHhmZjBceDg1cFx4YjhceGIwMWZcclx4MWJceGNlXHgwMVx4YzNceDAxXHgxZVx4MTAnIFx4ODJcblx4MDFceDAwOyIsCisgICAgImdlbmVyaWMiOgorICAgICAgICAiR0lGODlhXHgwY1x4MDBceDBjXHgwMFx4ODRceDAwXHgwMFx4ZmZceGZmXHhmN1x4ZjVceGY1XHhlZVx4ZTlceGU5XHhlNWZmZlx4MDBceDAwXHgwMFx4ZTdceGU3XHhlN15eXlx4ZjNceGYzXHhlZFx4OGVceDhlXHg4ZVx4ZTBceGUwXHhlMFx4OWZceDlmXHg5Zlx4OTNceDkzXHg5M1x4YTdceGE3XHhhN1x4OWVceDllXHg5ZWlpaWNjY1x4YTNceGEzXHhhM1x4ODRceDg0XHg4NFx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOVx4ZmZceGZlXHhmOSFceGZlXHgwZU1hZGUgd2l0aCBHSU1QXHgwMCxceDAwXHgwMFx4MDBceDAwXHgwY1x4MDBceDBjXHgwMFx4MDBceDA1LCAgXHg4ZVx4ODEwXHg5ZVx4ZTNAXHgxNFx4ZThpXHgxMFx4YzRceGQxXHg4YVx4MDhceDFjXHhjZlx4ODBNJHpceGVmXHhmZjBceDg1cFx4YjhceGIwMWZcclx4MWJceGNlXHgwMVx4YzNceDAxXHgxZVx4MTAnIFx4ODJcblx4MDFceDAwOyIsCisgICAgImRlc2NyaXB0aW9uIjogIlRoZSBiaW5hcnkgdmFsdWUgYWJvdmUgaXMgYSB0aW55IGFycm93IGVuY29kZWQgYXMgYSBnaWYgaW1hZ2UuIiwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LWJpbmFyeS1weTIuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWJpbmFyeS1weTIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2RiMTZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYmluYXJ5LXB5Mi5kYXRhCkBAIC0wLDAgKzEsMTIgQEAKK2Nhbm9uaWNhbDogISFiaW5hcnkgIlwKKyBSMGxHT0RsaERBQU1BSVFBQVAvLzkvWDE3dW5wNVdabVpnQUFBT2ZuNTE1ZVh2UHo3WTZPanVEZzRKK2ZuNVwKKyBPVGs2ZW5wNTZlbm1scGFXTmpZNk9qbzRTRWhQLysrZi8rK2YvKytmLysrZi8rK2YvKytmLysrZi8rK2YvK1wKKyArZi8rK2YvKytmLysrZi8rK2YvKytTSCtEazFoWkdVZ2QybDBhQ0JIU1UxUUFDd0FBQUFBREFBTUFBQUZMQ1wKKyBBZ2pvRXdudU5BRk9ocEVNVFJpZ2djejRCTkpIcnYvekNGY0xpd01XWU5HODRCd3dFZUVDY2dnZ29CQURzPSIKK2dlbmVyaWM6ICEhYmluYXJ5IHwKKyBSMGxHT0RsaERBQU1BSVFBQVAvLzkvWDE3dW5wNVdabVpnQUFBT2ZuNTE1ZVh2UHo3WTZPanVEZzRKK2ZuNQorIE9UazZlbnA1NmVubWxwYVdOalk2T2pvNFNFaFAvKytmLysrZi8rK2YvKytmLysrZi8rK2YvKytmLysrZi8rCisgK2YvKytmLysrZi8rK2YvKytmLysrU0grRGsxaFpHVWdkMmwwYUNCSFNVMVFBQ3dBQUFBQURBQU1BQUFGTEMKKyBBZ2pvRXdudU5BRk9ocEVNVFJpZ2djejRCTkpIcnYvekNGY0xpd01XWU5HODRCd3dFZUVDY2dnZ29CQURzPQorZGVzY3JpcHRpb246CisgVGhlIGJpbmFyeSB2YWx1ZSBhYm92ZSBpcyBhIHRpbnkgYXJyb3cgZW5jb2RlZCBhcyBhIGdpZiBpbWFnZS4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LWJpbmFyeS1weTMuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWJpbmFyeS1weTMuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJmYzNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYmluYXJ5LXB5My5jb2RlCkBAIC0wLDAgKzEsNyBAQAoreworICAgICJjYW5vbmljYWwiOgorICAgICAgICBiIkdJRjg5YVx4MGNceDAwXHgwY1x4MDBceDg0XHgwMFx4MDBceGZmXHhmZlx4ZjdceGY1XHhmNVx4ZWVceGU5XHhlOVx4ZTVmZmZceDAwXHgwMFx4MDBceGU3XHhlN1x4ZTdeXl5ceGYzXHhmM1x4ZWRceDhlXHg4ZVx4OGVceGUwXHhlMFx4ZTBceDlmXHg5Zlx4OWZceDkzXHg5M1x4OTNceGE3XHhhN1x4YTdceDllXHg5ZVx4OWVpaWljY2NceGEzXHhhM1x4YTNceDg0XHg4NFx4ODRceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjlceGZmXHhmZVx4ZjkhXHhmZVx4MGVNYWRlIHdpdGggR0lNUFx4MDAsXHgwMFx4MDBceDAwXHgwMFx4MGNceDAwXHgwY1x4MDBceDAwXHgwNSwgIFx4OGVceDgxMFx4OWVceGUzQFx4MTRceGU4aVx4MTBceGM0XHhkMVx4OGFceDA4XHgxY1x4Y2ZceDgwTSR6XHhlZlx4ZmYwXHg4NXBceGI4XHhiMDFmXHJceDFiXHhjZVx4MDFceGMzXHgwMVx4MWVceDEwJyBceDgyXG5ceDAxXHgwMDsiLAorICAgICJnZW5lcmljIjoKKyAgICAgICAgYiJHSUY4OWFceDBjXHgwMFx4MGNceDAwXHg4NFx4MDBceDAwXHhmZlx4ZmZceGY3XHhmNVx4ZjVceGVlXHhlOVx4ZTlceGU1ZmZmXHgwMFx4MDBceDAwXHhlN1x4ZTdceGU3Xl5eXHhmM1x4ZjNceGVkXHg4ZVx4OGVceDhlXHhlMFx4ZTBceGUwXHg5Zlx4OWZceDlmXHg5M1x4OTNceDkzXHhhN1x4YTdceGE3XHg5ZVx4OWVceDllaWlpY2NjXHhhM1x4YTNceGEzXHg4NFx4ODRceDg0XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5XHhmZlx4ZmVceGY5IVx4ZmVceDBlTWFkZSB3aXRoIEdJTVBceDAwLFx4MDBceDAwXHgwMFx4MDBceDBjXHgwMFx4MGNceDAwXHgwMFx4MDUsICBceDhlXHg4MTBceDllXHhlM0BceDE0XHhlOGlceDEwXHhjNFx4ZDFceDhhXHgwOFx4MWNceGNmXHg4ME0kelx4ZWZceGZmMFx4ODVwXHhiOFx4YjAxZlxyXHgxYlx4Y2VceDAxXHhjM1x4MDFceDFlXHgxMCcgXHg4MlxuXHgwMVx4MDA7IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGJpbmFyeSB2YWx1ZSBhYm92ZSBpcyBhIHRpbnkgYXJyb3cgZW5jb2RlZCBhcyBhIGdpZiBpbWFnZS4iLAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYmluYXJ5LXB5My5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYmluYXJ5LXB5My5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZGIxNmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1iaW5hcnktcHkzLmRhdGEKQEAgLTAsMCArMSwxMiBAQAorY2Fub25pY2FsOiAhIWJpbmFyeSAiXAorIFIwbEdPRGxoREFBTUFJUUFBUC8vOS9YMTd1bnA1V1ptWmdBQUFPZm41MTVlWHZQejdZNk9qdURnNEorZm41XAorIE9UazZlbnA1NmVubWxwYVdOalk2T2pvNFNFaFAvKytmLysrZi8rK2YvKytmLysrZi8rK2YvKytmLysrZi8rXAorICtmLysrZi8rK2YvKytmLysrZi8rK1NIK0RrMWhaR1VnZDJsMGFDQkhTVTFRQUN3QUFBQUFEQUFNQUFBRkxDXAorIEFnam9Fd251TkFGT2hwRU1UUmlnZ2N6NEJOSkhydi96Q0ZjTGl3TVdZTkc4NEJ3d0VlRUNjZ2dnb0JBRHM9IgorZ2VuZXJpYzogISFiaW5hcnkgfAorIFIwbEdPRGxoREFBTUFJUUFBUC8vOS9YMTd1bnA1V1ptWmdBQUFPZm41MTVlWHZQejdZNk9qdURnNEorZm41CisgT1RrNmVucDU2ZW5tbHBhV05qWTZPam80U0VoUC8rK2YvKytmLysrZi8rK2YvKytmLysrZi8rK2YvKytmLysKKyArZi8rK2YvKytmLysrZi8rK2YvKytTSCtEazFoWkdVZ2QybDBhQ0JIU1UxUUFDd0FBQUFBREFBTUFBQUZMQworIEFnam9Fd251TkFGT2hwRU1UUmlnZ2N6NEJOSkhydi96Q0ZjTGl3TVdZTkc4NEJ3d0VlRUNjZ2dnb0JBRHM9CitkZXNjcmlwdGlvbjoKKyBUaGUgYmluYXJ5IHZhbHVlIGFib3ZlIGlzIGEgdGlueSBhcnJvdyBlbmNvZGVkIGFzIGEgZ2lmIGltYWdlLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYm9vbC5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYm9vbC5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDI1ODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1ib29sLmNvZGUKQEAgLTAsMCArMSw3IEBACit7CisgICAgImNhbm9uaWNhbCI6IFRydWUsCisgICAgImFuc3dlciI6IEZhbHNlLAorICAgICJsb2dpY2FsIjogVHJ1ZSwKKyAgICAib3B0aW9uIjogVHJ1ZSwKKyAgICAiYnV0IjogeyAieSI6ICJpcyBhIHN0cmluZyIsICJuIjogImlzIGEgc3RyaW5nIiB9LAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYm9vbC5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtYm9vbC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZDY1MTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1ib29sLmRhdGEKQEAgLTAsMCArMSw5IEBACitjYW5vbmljYWw6IHllcworYW5zd2VyOiBOTworbG9naWNhbDogVHJ1ZQorb3B0aW9uOiBvbgorCisKK2J1dDoKKyAgICB5OiBpcyBhIHN0cmluZworICAgIG46IGlzIGEgc3RyaW5nCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1jdXN0b20uY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWN1c3RvbS5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNWYwNjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1jdXN0b20uY29kZQpAQCAtMCwwICsxLDEwIEBACitbCisgICAgTXlUZXN0Q2xhc3MxKHg9MSksCisgICAgTXlUZXN0Q2xhc3MxKHg9MSwgeT0yLCB6PTMpLAorICAgIE15VGVzdENsYXNzMih4PTEwKSwKKyAgICBNeVRlc3RDbGFzczIoeD0xMCwgeT0yMCwgej0zMCksCisgICAgTXlUZXN0Q2xhc3MzKHg9MSksCisgICAgTXlUZXN0Q2xhc3MzKHg9MSwgeT0yLCB6PTMpLAorICAgIE15VGVzdENsYXNzMyh4PTEsIHk9Miwgej0zKSwKKyAgICBZQU1MT2JqZWN0MShteV9wYXJhbWV0ZXI9J2ZvbycsIG15X2Fub3RoZXJfcGFyYW1ldGVyPVsxLDIsM10pCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1jdXN0b20uZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWN1c3RvbS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjBmNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1jdXN0b20uZGF0YQpAQCAtMCwwICsxLDI2IEBACistLS0KKy0gIXRhZzEKKyAgeDogMQorLSAhdGFnMQorICB4OiAxCisgICd5JzogMgorICB6OiAzCistICF0YWcyCisgIDEwCistICF0YWcyCisgID06IDEwCisgICd5JzogMjAKKyAgejogMzAKKy0gIXRhZzMKKyAgeDogMQorLSAhdGFnMworICB4OiAxCisgICd5JzogMgorICB6OiAzCistICF0YWczCisgID06IDEKKyAgJ3knOiAyCisgIHo6IDMKKy0gIWZvbworICBteS1wYXJhbWV0ZXI6IGZvbworICBteS1hbm90aGVyLXBhcmFtZXRlcjogWzEsMiwzXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtZmxvYXQuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWZsb2F0LmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5M2JmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWZsb2F0LmNvZGUKQEAgLTAsMCArMSw4IEBACit7CisgICAgImNhbm9uaWNhbCI6IDY4NTIzMC4xNSwKKyAgICAiZXhwb25lbnRpYWwiOiA2ODUyMzAuMTUsCisgICAgImZpeGVkIjogNjg1MjMwLjE1LAorICAgICJzZXhhZ2VzaW1hbCI6IDY4NTIzMC4xNSwKKyAgICAibmVnYXRpdmUgaW5maW5pdHkiOiAtMWUzMDAwMDAsCisgICAgIm5vdCBhIG51bWJlciI6IDFlMzAwMDAwLzFlMzAwMDAwLAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtZmxvYXQuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWZsb2F0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2MmM2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWZsb2F0LmRhdGEKQEAgLTAsMCArMSw2IEBACitjYW5vbmljYWw6IDYuODUyMzAxNWUrNQorZXhwb25lbnRpYWw6IDY4NS4yMzBfMTVlKzAzCitmaXhlZDogNjg1XzIzMC4xNQorc2V4YWdlc2ltYWw6IDE5MDoyMDozMC4xNQorbmVnYXRpdmUgaW5maW5pdHk6IC0uaW5mCitub3QgYSBudW1iZXI6IC5OYU4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LWludC5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtaW50LmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1OGY3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWludC5jb2RlCkBAIC0wLDAgKzEsOCBAQAoreworICAgICJjYW5vbmljYWwiOiA2ODUyMzAsCisgICAgImRlY2ltYWwiOiA2ODUyMzAsCisgICAgIm9jdGFsIjogNjg1MjMwLAorICAgICJoZXhhZGVjaW1hbCI6IDY4NTIzMCwKKyAgICAiYmluYXJ5IjogNjg1MjMwLAorICAgICJzZXhhZ2VzaW1hbCI6IDY4NTIzMCwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LWludC5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtaW50LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyYzMxNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LWludC5kYXRhCkBAIC0wLDAgKzEsNiBAQAorY2Fub25pY2FsOiA2ODUyMzAKK2RlY2ltYWw6ICs2ODVfMjMwCitvY3RhbDogMDI0NzIyNTYKK2hleGFkZWNpbWFsOiAweF8wQV83NF9BRQorYmluYXJ5OiAwYjEwMTBfMDExMV8wMTAwXzEwMTBfMTExMAorc2V4YWdlc2ltYWw6IDE5MDoyMDozMApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtbWFwLmNvZGUgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1tYXAuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzZiYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtbWFwLmNvZGUKQEAgLTAsMCArMSw2IEBACit7CisgICAgIkJsb2NrIHN0eWxlIjoKKyAgICAgICAgeyAiQ2xhcmsiIDogIkV2YW5zIiwgIkJyaWFuIiA6ICJJbmdlcnNvbiIsICJPcmVuIiA6ICJCZW4tS2lraSIgfSwKKyAgICAiRmxvdyBzdHlsZSI6CisgICAgICAgIHsgIkNsYXJrIiA6ICJFdmFucyIsICJCcmlhbiIgOiAiSW5nZXJzb24iLCAiT3JlbiIgOiAiQmVuLUtpa2kiIH0sCit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1tYXAuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LW1hcC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjQ0NmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1tYXAuZGF0YQpAQCAtMCwwICsxLDYgQEAKKyMgVW5vcmRlcmVkIHNldCBvZiBrZXk6IHZhbHVlIHBhaXJzLgorQmxvY2sgc3R5bGU6ICEhbWFwCisgIENsYXJrIDogRXZhbnMKKyAgQnJpYW4gOiBJbmdlcnNvbgorICBPcmVuICA6IEJlbi1LaWtpCitGbG93IHN0eWxlOiAhIW1hcCB7IENsYXJrOiBFdmFucywgQnJpYW46IEluZ2Vyc29uLCBPcmVuOiBCZW4tS2lraSB9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1tZXJnZS5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtbWVyZ2UuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q0MTlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtbWVyZ2UuY29kZQpAQCAtMCwwICsxLDEwIEBACitbCisgICAgeyAieCI6IDEsICJ5IjogMiB9LAorICAgIHsgIngiOiAwLCAieSI6IDIgfSwKKyAgICB7ICJyIjogMTAgfSwKKyAgICB7ICJyIjogMSB9LAorICAgIHsgIngiOiAxLCAieSI6IDIsICJyIjogMTAsICJsYWJlbCI6ICJjZW50ZXIvYmlnIiB9LAorICAgIHsgIngiOiAxLCAieSI6IDIsICJyIjogMTAsICJsYWJlbCI6ICJjZW50ZXIvYmlnIiB9LAorICAgIHsgIngiOiAxLCAieSI6IDIsICJyIjogMTAsICJsYWJlbCI6ICJjZW50ZXIvYmlnIiB9LAorICAgIHsgIngiOiAxLCAieSI6IDIsICJyIjogMTAsICJsYWJlbCI6ICJjZW50ZXIvYmlnIiB9LAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtbWVyZ2UuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LW1lcmdlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkYjJlMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LW1lcmdlLmRhdGEKQEAgLTAsMCArMSwyNyBAQAorLS0tCistICZDRU5URVIgeyB4OiAxLCAneSc6IDIgfQorLSAmTEVGVCB7IHg6IDAsICd5JzogMiB9CistICZCSUcgeyByOiAxMCB9CistICZTTUFMTCB7IHI6IDEgfQorCisjIEFsbCB0aGUgZm9sbG93aW5nIG1hcHMgYXJlIGVxdWFsOgorCistICMgRXhwbGljaXQga2V5cworICB4OiAxCisgICd5JzogMgorICByOiAxMAorICBsYWJlbDogY2VudGVyL2JpZworCistICMgTWVyZ2Ugb25lIG1hcAorICA8PCA6ICpDRU5URVIKKyAgcjogMTAKKyAgbGFiZWw6IGNlbnRlci9iaWcKKworLSAjIE1lcmdlIG11bHRpcGxlIG1hcHMKKyAgPDwgOiBbICpDRU5URVIsICpCSUcgXQorICBsYWJlbDogY2VudGVyL2JpZworCistICMgT3ZlcnJpZGUKKyAgPDwgOiBbICpCSUcsICpMRUZULCAqU01BTEwgXQorICB4OiAxCisgIGxhYmVsOiBjZW50ZXIvYmlnCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1udWxsLmNvZGUgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1udWxsLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5NWVhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LW51bGwuY29kZQpAQCAtMCwwICsxLDEzIEBACitbCisgICAgTm9uZSwKKyAgICB7ICJlbXB0eSI6IE5vbmUsICJjYW5vbmljYWwiOiBOb25lLCAiZW5nbGlzaCI6IE5vbmUsIE5vbmU6ICJudWxsIGtleSIgfSwKKyAgICB7CisgICAgICAgICJzcGFyc2UiOiBbCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgIjJuZCBlbnRyeSIsCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgIjR0aCBlbnRyeSIsCisgICAgICAgICAgICBOb25lLAorICAgICAgICBdLAorICAgIH0sCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1udWxsLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1udWxsLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkMDM0NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LW51bGwuZGF0YQpAQCAtMCwwICsxLDE4IEBACisjIEEgZG9jdW1lbnQgbWF5IGJlIG51bGwuCistLS0KKy0tLQorIyBUaGlzIG1hcHBpbmcgaGFzIGZvdXIga2V5cywKKyMgb25lIGhhcyBhIHZhbHVlLgorZW1wdHk6CitjYW5vbmljYWw6IH4KK2VuZ2xpc2g6IG51bGwKK346IG51bGwga2V5CistLS0KKyMgVGhpcyBzZXF1ZW5jZSBoYXMgZml2ZQorIyBlbnRyaWVzLCB0d28gaGF2ZSB2YWx1ZXMuCitzcGFyc2U6CisgIC0gfgorICAtIDJuZCBlbnRyeQorICAtCisgIC0gNHRoIGVudHJ5CisgIC0gTnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtb21hcC5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtb21hcC5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Y2YxYjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1vbWFwLmNvZGUKQEAgLTAsMCArMSw4IEBACit7CisgICAgIkJlc3RpYXJ5IjogWworICAgICAgICAoImFhcmR2YXJrIiwgIkFmcmljYW4gcGlnLWxpa2UgYW50IGVhdGVyLiBVZ2x5LiIpLAorICAgICAgICAoImFudGVhdGVyIiwgIlNvdXRoLUFtZXJpY2FuIGFudCBlYXRlci4gVHdvIHNwZWNpZXMuIiksCisgICAgICAgICgiYW5hY29uZGEiLCAiU291dGgtQW1lcmljYW4gY29uc3RyaWN0b3Igc25ha2UuIFNjYWx5LiIpLAorICAgIF0sCisgICAgIk51bWJlcnMiOiBbICgib25lIiwgMSksICgidHdvIiwgMiksICgidGhyZWUiLCAzKSBdLAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtb21hcC5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtb21hcC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTBmNDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1vbWFwLmRhdGEKQEAgLTAsMCArMSw4IEBACisjIEV4cGxpY2l0bHkgdHlwZWQgb3JkZXJlZCBtYXAgKGRpY3Rpb25hcnkpLgorQmVzdGlhcnk6ICEhb21hcAorICAtIGFhcmR2YXJrOiBBZnJpY2FuIHBpZy1saWtlIGFudCBlYXRlci4gVWdseS4KKyAgLSBhbnRlYXRlcjogU291dGgtQW1lcmljYW4gYW50IGVhdGVyLiBUd28gc3BlY2llcy4KKyAgLSBhbmFjb25kYTogU291dGgtQW1lcmljYW4gY29uc3RyaWN0b3Igc25ha2UuIFNjYWx5LgorICAjIEV0Yy4KKyMgRmxvdyBzdHlsZQorTnVtYmVyczogISFvbWFwIFsgb25lOiAxLCB0d286IDIsIHRocmVlIDogMyBdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1wYWlycy5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcGFpcnMuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGY4NmVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcGFpcnMuY29kZQpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiQmxvY2sgdGFza3MiOiBbCisgICAgICAgICgibWVldGluZyIsICJ3aXRoIHRlYW0uIiksCisgICAgICAgICgibWVldGluZyIsICJ3aXRoIGJvc3MuIiksCisgICAgICAgICgiYnJlYWsiLCAibHVuY2guIiksCisgICAgICAgICgibWVldGluZyIsICJ3aXRoIGNsaWVudC4iKSwKKyAgICBdLAorICAgICJGbG93IHRhc2tzIjogWyAoIm1lZXRpbmciLCAid2l0aCB0ZWFtIiksICgibWVldGluZyIsICJ3aXRoIGJvc3MiKSBdLAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcGFpcnMuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXBhaXJzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmNTViOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXBhaXJzLmRhdGEKQEAgLTAsMCArMSw3IEBACisjIEV4cGxpY2l0bHkgdHlwZWQgcGFpcnMuCitCbG9jayB0YXNrczogISFwYWlycworICAtIG1lZXRpbmc6IHdpdGggdGVhbS4KKyAgLSBtZWV0aW5nOiB3aXRoIGJvc3MuCisgIC0gYnJlYWs6IGx1bmNoLgorICAtIG1lZXRpbmc6IHdpdGggY2xpZW50LgorRmxvdyB0YXNrczogISFwYWlycyBbIG1lZXRpbmc6IHdpdGggdGVhbSwgbWVldGluZzogd2l0aCBib3NzIF0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1ib29sLmNvZGUgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tYm9vbC5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MGRhMDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tYm9vbC5jb2RlCkBAIC0wLDAgKzEgQEAKK1sgVHJ1ZSwgRmFsc2UgXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWJvb2wuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1ib29sLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2ODg2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1ib29sLmRhdGEKQEAgLTAsMCArMSBAQAorWyAhIXB5dGhvbi9ib29sIFRydWUsICEhcHl0aG9uL2Jvb2wgRmFsc2UgXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWJ5dGVzLXB5My5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWJ5dGVzLXB5My5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDUxZDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tYnl0ZXMtcHkzLmNvZGUKQEAgLTAsMCArMSBAQAorYidzb21lIGJpbmFyeSBkYXRhJwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWJ5dGVzLXB5My5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWJ5dGVzLXB5My5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Mjg3MjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tYnl0ZXMtcHkzLmRhdGEKQEAgLTAsMCArMSBAQAorLS0tICEhcHl0aG9uL2J5dGVzICdjMjl0WlNCaWFXNWhjbmtnWkdGMFlRPT0nCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tY29tcGxleC5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWNvbXBsZXguY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTgyZGZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWNvbXBsZXguY29kZQpAQCAtMCwwICsxIEBACitbMC41KzBqLCAwLjUrMC41aiwgMC41aiwgLTAuNSswLjVqLCAtMC41KzBqLCAtMC41LTAuNWosIC0wLjVqLCAwLjUtMC41al0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1jb21wbGV4LmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tY29tcGxleC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWJhZDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tY29tcGxleC5kYXRhCkBAIC0wLDAgKzEsOCBAQAorLSAhIXB5dGhvbi9jb21wbGV4IDAuNSswagorLSAhIXB5dGhvbi9jb21wbGV4IDAuNSswLjVqCistICEhcHl0aG9uL2NvbXBsZXggMC41agorLSAhIXB5dGhvbi9jb21wbGV4IC0wLjUrMC41agorLSAhIXB5dGhvbi9jb21wbGV4IC0wLjUrMGoKKy0gISFweXRob24vY29tcGxleCAtMC41LTAuNWoKKy0gISFweXRob24vY29tcGxleCAtMC41agorLSAhIXB5dGhvbi9jb21wbGV4IDAuNS0wLjVqCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tZmxvYXQuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1mbG9hdC5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OTEwYTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tZmxvYXQuY29kZQpAQCAtMCwwICsxIEBACisxMjMuNDU2CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tZmxvYXQuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1mbG9hdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjBlYjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tZmxvYXQuZGF0YQpAQCAtMCwwICsxIEBACishIXB5dGhvbi9mbG9hdCAxMjMuNDU2CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24taW50LmNvZGUgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24taW50LmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkwYTE4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1pbnQuY29kZQpAQCAtMCwwICsxIEBACisxMjMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1pbnQuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1pbnQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDFkNjY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWludC5kYXRhCkBAIC0wLDAgKzEgQEAKKyEhcHl0aG9uL2ludCAxMjMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1sb25nLXNob3J0LXB5Mi5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWxvbmctc2hvcnQtcHkyLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYzNmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1sb25nLXNob3J0LXB5Mi5jb2RlCkBAIC0wLDAgKzEgQEAKKzEyM0wKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1sb25nLXNob3J0LXB5Mi5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWxvbmctc2hvcnQtcHkyLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkNWRjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1sb25nLXNob3J0LXB5Mi5kYXRhCkBAIC0wLDAgKzEgQEAKKyEhcHl0aG9uL2xvbmcgMTIzCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbG9uZy1zaG9ydC1weTMuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1sb25nLXNob3J0LXB5My5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MGExODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbG9uZy1zaG9ydC1weTMuY29kZQpAQCAtMCwwICsxIEBACisxMjMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1sb25nLXNob3J0LXB5My5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLWxvbmctc2hvcnQtcHkzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkNWRjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1sb25nLXNob3J0LXB5My5kYXRhCkBAIC0wLDAgKzEgQEAKKyEhcHl0aG9uL2xvbmcgMTIzCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbmFtZS1tb2R1bGUuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1uYW1lLW1vZHVsZS5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTRiNmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbmFtZS1tb2R1bGUuY29kZQpAQCAtMCwwICsxIEBACitbc3RyLCB5YW1sLkxvYWRlciwgeWFtbC5kdW1wLCBhYnMsIHlhbWwudG9rZW5zLCBzaWduYWwuSGFuZGxlcnNdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbmFtZS1tb2R1bGUuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1uYW1lLW1vZHVsZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYTJjMjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbmFtZS1tb2R1bGUuZGF0YQpAQCAtMCwwICsxLDYgQEAKKy0gISFweXRob24vbmFtZTpzdHIKKy0gISFweXRob24vbmFtZTp5YW1sLkxvYWRlcgorLSAhIXB5dGhvbi9uYW1lOnlhbWwuZHVtcAorLSAhIXB5dGhvbi9uYW1lOmFicworLSAhIXB5dGhvbi9tb2R1bGU6eWFtbC50b2tlbnMKKy0gISFweXRob24vbmFtZTpzaWduYWwuSGFuZGxlcnMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1ub25lLmNvZGUgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbm9uZS5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDQ3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbm9uZS5jb2RlCkBAIC0wLDAgKzEgQEAKK05vbmUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1ub25lLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbm9uZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MDdlYzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tbm9uZS5kYXRhCkBAIC0wLDAgKzEgQEAKKyEhcHl0aG9uL25vbmUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1vYmplY3QuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1vYmplY3QuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTYxMWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLW9iamVjdC5jb2RlCkBAIC0wLDAgKzEsMjUgQEAKK1sKK0FuT2JqZWN0KDEsICd0d28nLCBbMywzLDNdKSwKK0FuSW5zdGFuY2UoMSwgJ3R3bycsIFszLDMsM10pLAorCitBbk9iamVjdCgxLCAndHdvJywgWzMsMywzXSksCitBbkluc3RhbmNlKDEsICd0d28nLCBbMywzLDNdKSwKKworQVN0YXRlKDEsICd0d28nLCBbMywzLDNdKSwKK0FDdXN0b21TdGF0ZSgxLCAndHdvJywgWzMsMywzXSksCisKK0luaXRBcmdzKDEsICd0d28nLCBbMywzLDNdKSwKK0luaXRBcmdzV2l0aFN0YXRlKDEsICd0d28nLCBbMywzLDNdKSwKKworTmV3QXJncygxLCAndHdvJywgWzMsMywzXSksCitOZXdBcmdzV2l0aFN0YXRlKDEsICd0d28nLCBbMywzLDNdKSwKKworUmVkdWNlKDEsICd0d28nLCBbMywzLDNdKSwKK1JlZHVjZVdpdGhTdGF0ZSgxLCAndHdvJywgWzMsMywzXSksCisKK1Nsb3RzKDEsICd0d28nLCBbMywzLDNdKSwKKworTXlJbnQoMyksCitNeUxpc3QoMyksCitNeURpY3QoMyksCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tb2JqZWN0LmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tb2JqZWN0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3OTdlNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1vYmplY3QuZGF0YQpAQCAtMCwwICsxLDIzIEBACistICEhcHl0aG9uL29iamVjdDp0ZXN0X2NvbnN0cnVjdG9yLkFuT2JqZWN0IHsgZm9vOiAxLCBiYXI6IHR3bywgYmF6OiBbMywzLDNdIH0KKy0gISFweXRob24vb2JqZWN0OnRlc3RfY29uc3RydWN0b3IuQW5JbnN0YW5jZSB7IGZvbzogMSwgYmFyOiB0d28sIGJhejogWzMsMywzXSB9CisKKy0gISFweXRob24vb2JqZWN0L25ldzp0ZXN0X2NvbnN0cnVjdG9yLkFuT2JqZWN0IHsgYXJnczogWzEsIHR3b10sIGt3ZHM6IHtiYXo6IFszLDMsM119IH0KKy0gISFweXRob24vb2JqZWN0L2FwcGx5OnRlc3RfY29uc3RydWN0b3IuQW5JbnN0YW5jZSB7IGFyZ3M6IFsxLCB0d29dLCBrd2RzOiB7YmF6OiBbMywzLDNdfSB9CisKKy0gISFweXRob24vb2JqZWN0OnRlc3RfY29uc3RydWN0b3IuQVN0YXRlIHsgX2ZvbzogMSwgX2JhcjogdHdvLCBfYmF6OiBbMywzLDNdIH0KKy0gISFweXRob24vb2JqZWN0L25ldzp0ZXN0X2NvbnN0cnVjdG9yLkFDdXN0b21TdGF0ZSB7IHN0YXRlOiAhIXB5dGhvbi90dXBsZSBbMSwgdHdvLCBbMywzLDNdXSB9CisKKy0gISFweXRob24vb2JqZWN0L25ldzp0ZXN0X2NvbnN0cnVjdG9yLkluaXRBcmdzIFsxLCB0d28sIFszLDMsM11dCistICEhcHl0aG9uL29iamVjdC9uZXc6dGVzdF9jb25zdHJ1Y3Rvci5Jbml0QXJnc1dpdGhTdGF0ZSB7IGFyZ3M6IFsxLCB0d29dLCBzdGF0ZTogWzMsMywzXSB9CisKKy0gISFweXRob24vb2JqZWN0L25ldzp0ZXN0X2NvbnN0cnVjdG9yLk5ld0FyZ3MgWzEsIHR3bywgWzMsMywzXV0KKy0gISFweXRob24vb2JqZWN0L25ldzp0ZXN0X2NvbnN0cnVjdG9yLk5ld0FyZ3NXaXRoU3RhdGUgeyBhcmdzOiBbMSwgdHdvXSwgc3RhdGU6IFszLDMsM10gfQorCistICEhcHl0aG9uL29iamVjdC9hcHBseTp0ZXN0X2NvbnN0cnVjdG9yLlJlZHVjZSBbMSwgdHdvLCBbMywzLDNdXQorLSAhIXB5dGhvbi9vYmplY3QvYXBwbHk6dGVzdF9jb25zdHJ1Y3Rvci5SZWR1Y2VXaXRoU3RhdGUgeyBhcmdzOiBbMSwgdHdvXSwgc3RhdGU6IFszLDMsM10gfQorCistICEhcHl0aG9uL29iamVjdC9uZXc6dGVzdF9jb25zdHJ1Y3Rvci5TbG90cyB7IHN0YXRlOiAhIXB5dGhvbi90dXBsZSBbbnVsbCwgeyBmb286IDEsIGJhcjogJ3R3bycsIGJhejogWzMsMywzXSB9IF0gfQorCistICEhcHl0aG9uL29iamVjdC9uZXc6dGVzdF9jb25zdHJ1Y3Rvci5NeUludCBbM10KKy0gISFweXRob24vb2JqZWN0L25ldzp0ZXN0X2NvbnN0cnVjdG9yLk15TGlzdCB7IGxpc3RpdGVtczogW34sIH4sIH5dIH0KKy0gISFweXRob24vb2JqZWN0L25ldzp0ZXN0X2NvbnN0cnVjdG9yLk15RGljdCB7IGRpY3RpdGVtczogezAsIDEsIDJ9IH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1zdHItYXNjaWkuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1zdHItYXNjaWkuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQ2MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXN0ci1hc2NpaS5jb2RlCkBAIC0wLDAgKzEgQEAKKyJhc2NpaSBzdHJpbmciCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tc3RyLWFzY2lpLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tc3RyLWFzY2lpLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzMzQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1zdHItYXNjaWkuZGF0YQpAQCAtMCwwICsxIEBACistLS0gISFweXRob24vc3RyICJhc2NpaSBzdHJpbmciCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tc3RyLXV0ZjgtcHkyLmNvZGUgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tc3RyLXV0ZjgtcHkyLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMjhhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1zdHItdXRmOC1weTIuY29kZQpAQCAtMCwwICsxIEBACit1J1x1MDQyZFx1MDQ0Mlx1MDQzZSBcdTA0NDNcdTA0M2RcdTA0MzhcdTA0M2FcdTA0M2VcdTA0MzRcdTA0M2RcdTA0MzBcdTA0NGYgXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDMwJy5lbmNvZGUoJ3V0Zi04JykKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1zdHItdXRmOC1weTIuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi1zdHItdXRmOC1weTIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWYyYzcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXN0ci11dGY4LXB5Mi5kYXRhCkBAIC0wLDAgKzEgQEAKKy0tLSAhIXB5dGhvbi9zdHIgItCt0YLQviDRg9C90LjQutC+0LTQvdCw0Y8g0YHRgtGA0L7QutCwIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXN0ci11dGY4LXB5My5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXN0ci11dGY4LXB5My5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjYwMzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tc3RyLXV0ZjgtcHkzLmNvZGUKQEAgLTAsMCArMSBAQAorJ1x1MDQyZFx1MDQ0Mlx1MDQzZSBcdTA0NDNcdTA0M2RcdTA0MzhcdTA0M2FcdTA0M2VcdTA0MzRcdTA0M2RcdTA0MzBcdTA0NGYgXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDMwJwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXN0ci11dGY4LXB5My5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXN0ci11dGY4LXB5My5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZjJjNzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tc3RyLXV0ZjgtcHkzLmRhdGEKQEAgLTAsMCArMSBAQAorLS0tICEhcHl0aG9uL3N0ciAi0K3RgtC+INGD0L3QuNC60L7QtNC90LDRjyDRgdGC0YDQvtC60LAiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdHVwbGUtbGlzdC1kaWN0LmNvZGUgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdHVwbGUtbGlzdC1kaWN0LmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjZWQ5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi10dXBsZS1saXN0LWRpY3QuY29kZQpAQCAtMCwwICsxLDYgQEAKK1sKKyAgICBbMSwgMiwgMywgNF0sCisgICAgKDEsIDIsIDMsIDQpLAorICAgIHsxOiAyLCAzOiA0fSwKKyAgICB7KDAsMCk6IDAsICgwLDEpOiAxLCAoMSwwKTogMSwgKDEsMSk6IDB9LAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXR1cGxlLWxpc3QtZGljdC5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXR1cGxlLWxpc3QtZGljdC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NjE1OWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdHVwbGUtbGlzdC1kaWN0LmRhdGEKQEAgLTAsMCArMSw4IEBACistICEhcHl0aG9uL2xpc3QgWzEsIDIsIDMsIDRdCistICEhcHl0aG9uL3R1cGxlIFsxLCAyLCAzLCA0XQorLSAhIXB5dGhvbi9kaWN0IHsxOiAyLCAzOiA0fQorLSAhIXB5dGhvbi9kaWN0CisgICAgISFweXRob24vdHVwbGUgWzAsMF06IDAKKyAgICAhIXB5dGhvbi90dXBsZSBbMCwxXTogMQorICAgICEhcHl0aG9uL3R1cGxlIFsxLDBdOiAxCisgICAgISFweXRob24vdHVwbGUgWzEsMV06IDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLWFzY2lpLXB5Mi5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXVuaWNvZGUtYXNjaWktcHkyLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjZDgyYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLWFzY2lpLXB5Mi5jb2RlCkBAIC0wLDAgKzEgQEAKK3UiYXNjaWkgc3RyaW5nIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXVuaWNvZGUtYXNjaWktcHkyLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS1hc2NpaS1weTIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTA2NDdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXVuaWNvZGUtYXNjaWktcHkyLmRhdGEKQEAgLTAsMCArMSBAQAorLS0tICEhcHl0aG9uL3VuaWNvZGUgImFzY2lpIHN0cmluZyIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLWFzY2lpLXB5My5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXVuaWNvZGUtYXNjaWktcHkzLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkNjJmNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLWFzY2lpLXB5My5jb2RlCkBAIC0wLDAgKzEgQEAKKyJhc2NpaSBzdHJpbmciCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS1hc2NpaS1weTMuZGF0YSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLWFzY2lpLXB5My5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMDY0N2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS1hc2NpaS1weTMuZGF0YQpAQCAtMCwwICsxIEBACistLS0gISFweXRob24vdW5pY29kZSAiYXNjaWkgc3RyaW5nIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtcHl0aG9uLXVuaWNvZGUtdXRmOC1weTIuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLXV0ZjgtcHkyLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5M2FjNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLXV0ZjgtcHkyLmNvZGUKQEAgLTAsMCArMSBAQAordSdcdTA0MmRcdTA0NDJcdTA0M2UgXHUwNDQzXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDMwXHUwNDRmIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzZVx1MDQzYVx1MDQzMCcKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLXV0ZjgtcHkyLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS11dGY4LXB5Mi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOTgwZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS11dGY4LXB5Mi5kYXRhCkBAIC0wLDAgKzEgQEAKKy0tLSAhIXB5dGhvbi91bmljb2RlICLQrdGC0L4g0YPQvdC40LrQvtC00L3QsNGPINGB0YLRgNC+0LrQsCIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLXV0ZjgtcHkzLmNvZGUgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS11dGY4LXB5My5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjYwMzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS11dGY4LXB5My5jb2RlCkBAIC0wLDAgKzEgQEAKKydcdTA0MmRcdTA0NDJcdTA0M2UgXHUwNDQzXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDMwXHUwNDRmIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzZVx1MDQzYVx1MDQzMCcKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXB5dGhvbi11bmljb2RlLXV0ZjgtcHkzLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS11dGY4LXB5My5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOTgwZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1weXRob24tdW5pY29kZS11dGY4LXB5My5kYXRhCkBAIC0wLDAgKzEgQEAKKy0tLSAhIXB5dGhvbi91bmljb2RlICLQrdGC0L4g0YPQvdC40LrQvtC00L3QsNGPINGB0YLRgNC+0LrQsCIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXNlcS5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc2VxLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5MGMwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXNlcS5jb2RlCkBAIC0wLDAgKzEsNCBAQAoreworICAgICJCbG9jayBzdHlsZSI6IFsiTWVyY3VyeSIsICJWZW51cyIsICJFYXJ0aCIsICJNYXJzIiwgIkp1cGl0ZXIiLCAiU2F0dXJuIiwgIlVyYW51cyIsICJOZXB0dW5lIiwgIlBsdXRvIl0sCisgICAgIkZsb3cgc3R5bGUiOiBbIk1lcmN1cnkiLCAiVmVudXMiLCAiRWFydGgiLCAiTWFycyIsICJKdXBpdGVyIiwgIlNhdHVybiIsICJVcmFudXMiLCAiTmVwdHVuZSIsICJQbHV0byJdLAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc2VxLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zZXEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjkyZmQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc2VxLmRhdGEKQEAgLTAsMCArMSwxNSBAQAorIyBPcmRlcmVkIHNlcXVlbmNlIG9mIG5vZGVzCitCbG9jayBzdHlsZTogISFzZXEKKy0gTWVyY3VyeSAgICMgUm90YXRlcyAtIG5vIGxpZ2h0L2Rhcmsgc2lkZXMuCistIFZlbnVzICAgICAjIERlYWRsaWVzdC4gQXB0bHkgbmFtZWQuCistIEVhcnRoICAgICAjIE1vc3RseSBkaXJ0LgorLSBNYXJzICAgICAgIyBTZWVtcyBlbXB0eS4KKy0gSnVwaXRlciAgICMgVGhlIGtpbmcuCistIFNhdHVybiAgICAjIFByZXR0eS4KKy0gVXJhbnVzICAgICMgV2hlcmUgdGhlIHN1biBoYXJkbHkgc2hpbmVzLgorLSBOZXB0dW5lICAgIyBCb3JpbmcuIE5vIHJpbmdzLgorLSBQbHV0byAgICAgIyBZb3UgY2FsbCB0aGlzIGEgcGxhbmV0PworRmxvdyBzdHlsZTogISFzZXEgWyBNZXJjdXJ5LCBWZW51cywgRWFydGgsIE1hcnMsICAgICAgIyBSb2NrcworICAgICAgICAgICAgICAgICAgICBKdXBpdGVyLCBTYXR1cm4sIFVyYW51cywgTmVwdHVuZSwgIyBHYXMKKyAgICAgICAgICAgICAgICAgICAgUGx1dG8gXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3ZlcnJhdGVkCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXNldC5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc2V0LmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwOTBlOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXNldC5jb2RlCkBAIC0wLDAgKzEsNCBAQAoreworICAgICJiYXNlYmFsbCBwbGF5ZXJzIjogc2V0KFsiTWFyayBNY0d3aXJlIiwgIlNhbW15IFNvc2EiLCAiS2VuIEdyaWZmZXkiXSksCisgICAgImJhc2ViYWxsIHRlYW1zIjogc2V0KFsiQm9zdG9uIFJlZCBTb3giLCAiRGV0cm9pdCBUaWdlcnMiLCAiTmV3IFlvcmsgWWFua2VlcyJdKSwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXNldC5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc2V0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1ZGM4OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXNldC5kYXRhCkBAIC0wLDAgKzEsNyBAQAorIyBFeHBsaWNpdGx5IHR5cGVkIHNldC4KK2Jhc2ViYWxsIHBsYXllcnM6ICEhc2V0CisgID8gTWFyayBNY0d3aXJlCisgID8gU2FtbXkgU29zYQorICA/IEtlbiBHcmlmZmV5CisjIEZsb3cgc3R5bGUKK2Jhc2ViYWxsIHRlYW1zOiAhIXNldCB7IEJvc3RvbiBSZWQgU294LCBEZXRyb2l0IFRpZ2VycywgTmV3IFlvcmsgWWFua2VlcyB9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHItYXNjaWkuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXN0ci1hc2NpaS5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZDYyZjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHItYXNjaWkuY29kZQpAQCAtMCwwICsxIEBACisiYXNjaWkgc3RyaW5nIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc3RyLWFzY2lpLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHItYXNjaWkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDkzMDEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc3RyLWFzY2lpLmRhdGEKQEAgLTAsMCArMSBAQAorLS0tICEhc3RyICJhc2NpaSBzdHJpbmciCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHItdXRmOC1weTIuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXN0ci11dGY4LXB5Mi5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OTNhYzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHItdXRmOC1weTIuY29kZQpAQCAtMCwwICsxIEBACit1J1x1MDQyZFx1MDQ0Mlx1MDQzZSBcdTA0NDNcdTA0M2RcdTA0MzhcdTA0M2FcdTA0M2VcdTA0MzRcdTA0M2RcdTA0MzBcdTA0NGYgXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDMwJwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc3RyLXV0ZjgtcHkyLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHItdXRmOC1weTIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzU1ZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc3RyLXV0ZjgtcHkyLmRhdGEKQEAgLTAsMCArMSBAQAorLS0tICEhc3RyICLQrdGC0L4g0YPQvdC40LrQvtC00L3QsNGPINGB0YLRgNC+0LrQsCIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXN0ci11dGY4LXB5My5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc3RyLXV0ZjgtcHkzLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2NjAzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXN0ci11dGY4LXB5My5jb2RlCkBAIC0wLDAgKzEgQEAKKydcdTA0MmRcdTA0NDJcdTA0M2UgXHUwNDQzXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDMwXHUwNDRmIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzZVx1MDQzYVx1MDQzMCcKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXN0ci11dGY4LXB5My5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc3RyLXV0ZjgtcHkzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1NWYxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXN0ci11dGY4LXB5My5kYXRhCkBAIC0wLDAgKzEgQEAKKy0tLSAhIXN0ciAi0K3RgtC+INGD0L3QuNC60L7QtNC90LDRjyDRgdGC0YDQvtC60LAiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHIuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXN0ci5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTcyMTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHIuY29kZQpAQCAtMCwwICsxIEBACit7ICJzdHJpbmciOiAiYWJjZCIgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc3RyLmRhdGEgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC1zdHIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDZhYzZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3Qtc3RyLmRhdGEKQEAgLTAsMCArMSBAQAorc3RyaW5nOiBhYmNkCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC10aW1lc3RhbXAuY29kZSBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXRpbWVzdGFtcC5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYzNiMmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2NvbnN0cnVjdC10aW1lc3RhbXAuY29kZQpAQCAtMCwwICsxLDcgQEAKK3sKKyAgICAiY2Fub25pY2FsIjogZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMSwgMTIsIDE1LCAyLCA1OSwgNDMsIDEwMDAwMCksCisgICAgInZhbGlkIGlzbzg2MDEiOiBkYXRldGltZS5kYXRldGltZSgyMDAxLCAxMiwgMTUsIDIsIDU5LCA0MywgMTAwMDAwKSwKKyAgICAic3BhY2Ugc2VwYXJhdGVkIjogZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMSwgMTIsIDE1LCAyLCA1OSwgNDMsIDEwMDAwMCksCisgICAgIm5vIHRpbWUgem9uZSAoWikiOiBkYXRldGltZS5kYXRldGltZSgyMDAxLCAxMiwgMTUsIDIsIDU5LCA0MywgMTAwMDAwKSwKKyAgICAiZGF0ZSAoMDA6MDA6MDBaKSI6IGRhdGV0aW1lLmRhdGUoMjAwMiwgMTIsIDE0KSwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvY29uc3RydWN0LXRpbWVzdGFtcC5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtdGltZXN0YW1wLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmMzg0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvY29uc3RydWN0LXRpbWVzdGFtcC5kYXRhCkBAIC0wLDAgKzEsNSBAQAorY2Fub25pY2FsOiAgICAgICAgMjAwMS0xMi0xNVQwMjo1OTo0My4xWgordmFsaWQgaXNvODYwMTogICAgMjAwMS0xMi0xNHQyMTo1OTo0My4xMC0wNTowMAorc3BhY2Ugc2VwYXJhdGVkOiAgMjAwMS0xMi0xNCAyMTo1OTo0My4xMCAtNQorbm8gdGltZSB6b25lIChaKTogMjAwMS0xMi0xNSAyOjU5OjQzLjEwCitkYXRlICgwMDowMDowMFopOiAyMDAyLTEyLTE0CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC12YWx1ZS5jb2RlIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtdmFsdWUuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYwMTVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtdmFsdWUuY29kZQpAQCAtMCwwICsxLDkgQEAKK1sKKyAgICB7ICJsaW5rIHdpdGgiOiBbICJsaWJyYXJ5MS5kbGwiLCAibGlicmFyeTIuZGxsIiBdIH0sCisgICAgeworICAgICAgICAibGluayB3aXRoIjogWworICAgICAgICAgICAgeyAiPSI6ICJsaWJyYXJ5MS5kbGwiLCAidmVyc2lvbiI6IDEuMiB9LAorICAgICAgICAgICAgeyAiPSI6ICJsaWJyYXJ5Mi5kbGwiLCAidmVyc2lvbiI6IDIuMyB9LAorICAgICAgICBdLAorICAgIH0sCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2NvbnN0cnVjdC12YWx1ZS5kYXRhIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtdmFsdWUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWI3OTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9jb25zdHJ1Y3QtdmFsdWUuZGF0YQpAQCAtMCwwICsxLDEwIEBACistLS0gICAgICMgT2xkIHNjaGVtYQorbGluayB3aXRoOgorICAtIGxpYnJhcnkxLmRsbAorICAtIGxpYnJhcnkyLmRsbAorLS0tICAgICAjIE5ldyBzY2hlbWEKK2xpbmsgd2l0aDoKKyAgLSA9IDogbGlicmFyeTEuZGxsCisgICAgdmVyc2lvbjogMS4yCisgIC0gPSA6IGxpYnJhcnkyLmRsbAorICAgIHZlcnNpb246IDIuMwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9kb2N1bWVudC1zZXBhcmF0b3ItaW4tcXVvdGVkLXNjYWxhci5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2RvY3VtZW50LXNlcGFyYXRvci1pbi1xdW90ZWQtc2NhbGFyLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWViMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9kb2N1bWVudC1zZXBhcmF0b3ItaW4tcXVvdGVkLXNjYWxhci5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwxMSBAQAorLS0tCisidGhpcyAtLS0gaXMgY29ycmVjdCIKKy0tLQorInRoaXMKKy4uLmlzIGFsc28KK2NvcnJlY3QiCistLS0KKyJhIHF1b3RlZCBzY2FsYXIKK2Nhbm5vdCBjb250YWluCistLS0KK2RvY3VtZW50IHNlcGFyYXRvcnMiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2RvY3VtZW50cy5ldmVudHMgYi90ZXN0cy9kYXRhL2RvY3VtZW50cy5ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1YTUxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZG9jdW1lbnRzLmV2ZW50cwpAQCAtMCwwICsxLDExIEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydCB7IGV4cGxpY2l0OiBmYWxzZSB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsZmFsc2VdLCB2YWx1ZTogJ2RhdGEnIH0KKy0gIURvY3VtZW50RW5kCistICFEb2N1bWVudFN0YXJ0CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsZmFsc2VdIH0KKy0gIURvY3VtZW50RW5kCistICFEb2N1bWVudFN0YXJ0IHsgdmVyc2lvbjogWzEsMV0sIHRhZ3M6IHsgJyEnOiAnIWZvbycsICcheWFtbCEnOiAndGFnOnlhbWwub3JnLDIwMDI6JywgJyF1Z2x5ISc6ICchISEhISEhJyB9IH0KKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSxmYWxzZV0gfQorLSAhRG9jdW1lbnRFbmQKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9kdXBsaWNhdGUtYW5jaG9yLTEubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9kdXBsaWNhdGUtYW5jaG9yLTEubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmNmMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1hbmNob3ItMS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwzIEBACistICZmb28gYmFyCistICZiYXIgYmFyCistICZmb28gYmFyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1hbmNob3ItMi5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1hbmNob3ItMi5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiNDM4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLWFuY2hvci0yLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACismZm9vIFsxLCAyLCAzLCAmZm9vIDRdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1rZXkuZm9ybWVyLWxvYWRlci1lcnJvci5jb2RlIGIvdGVzdHMvZGF0YS9kdXBsaWNhdGUta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjczOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9kdXBsaWNhdGUta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuY29kZQpAQCAtMCwwICsxIEBACit7ICdmb28nOiAnYmF6JyB9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1rZXkuZm9ybWVyLWxvYWRlci1lcnJvci5kYXRhIGIvdGVzdHMvZGF0YS9kdXBsaWNhdGUta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGRlYjhmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9kdXBsaWNhdGUta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuZGF0YQpAQCAtMCwwICsxLDMgQEAKKy0tLQorZm9vOiBiYXIKK2ZvbzogYmF6CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1tYXBwaW5nLWtleS5mb3JtZXItbG9hZGVyLWVycm9yLmNvZGUgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1tYXBwaW5nLWtleS5mb3JtZXItbG9hZGVyLWVycm9yLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhNjI4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLW1hcHBpbmcta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuY29kZQpAQCAtMCwwICsxIEBACit7ICdmb28nOiB7ICdiYXonOiAnYmF0JywgJ2Zvbyc6ICdkdXBsaWNhdGUga2V5JyB9IH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZHVwbGljYXRlLW1hcHBpbmcta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuZGF0YSBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLW1hcHBpbmcta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTdiNGQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9kdXBsaWNhdGUtbWFwcGluZy1rZXkuZm9ybWVyLWxvYWRlci1lcnJvci5kYXRhCkBAIC0wLDAgKzEsNiBAQAorLS0tCismYW5jaG9yIGZvbzoKKyAgICBmb286IGJhcgorICAgICphbmNob3I6IGR1cGxpY2F0ZSBrZXkKKyAgICBiYXo6IGJhdAorICAgICphbmNob3I6IGR1cGxpY2F0ZSBrZXkKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZHVwbGljYXRlLW1lcmdlLWtleS5mb3JtZXItbG9hZGVyLWVycm9yLmNvZGUgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1tZXJnZS1rZXkuZm9ybWVyLWxvYWRlci1lcnJvci5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzU3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS1tZXJnZS1rZXkuZm9ybWVyLWxvYWRlci1lcnJvci5jb2RlCkBAIC0wLDAgKzEgQEAKK3sgJ3gnOiAxLCAneSc6IDIsICdmb28nOiAnYmFyJywgJ3onOiAzLCAndCc6IDQgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9kdXBsaWNhdGUtbWVyZ2Uta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuZGF0YSBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLW1lcmdlLWtleS5mb3JtZXItbG9hZGVyLWVycm9yLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViYzNhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLW1lcmdlLWtleS5mb3JtZXItbG9hZGVyLWVycm9yLmRhdGEKQEAgLTAsMCArMSw0IEBACistLS0KKzw8OiB7eDogMSwgeTogMn0KK2ZvbzogYmFyCis8PDoge3o6IDMsIHQ6IDR9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2R1cGxpY2F0ZS10YWctZGlyZWN0aXZlLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLXRhZy1kaXJlY3RpdmUubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzgxYTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS10YWctZGlyZWN0aXZlLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDMgQEAKKyVUQUcgICAgIWZvbyEgICBiYXIKKyVUQUcgICAgIWZvbyEgICBiYXoKKy0tLSBmb28KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZHVwbGljYXRlLXZhbHVlLWtleS5mb3JtZXItbG9hZGVyLWVycm9yLmNvZGUgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS12YWx1ZS1rZXkuZm9ybWVyLWxvYWRlci1lcnJvci5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjQ4YzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS12YWx1ZS1rZXkuZm9ybWVyLWxvYWRlci1lcnJvci5jb2RlCkBAIC0wLDAgKzEgQEAKK3sgJ2Zvbyc6ICdiYXInLCAnPSc6IDIgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9kdXBsaWNhdGUtdmFsdWUta2V5LmZvcm1lci1sb2FkZXItZXJyb3IuZGF0YSBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLXZhbHVlLWtleS5mb3JtZXItbG9hZGVyLWVycm9yLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0YTFkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLXZhbHVlLWtleS5mb3JtZXItbG9hZGVyLWVycm9yLmRhdGEKQEAgLTAsMCArMSw0IEBACistLS0KKz06IDEKK2ZvbzogYmFyCis9OiAyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2R1cGxpY2F0ZS15YW1sLWRpcmVjdGl2ZS5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2R1cGxpY2F0ZS15YW1sLWRpcmVjdGl2ZS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3MjM5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZHVwbGljYXRlLXlhbWwtZGlyZWN0aXZlLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDMgQEAKKyVZQU1MICAgMS4xCislWUFNTCAgIDEuMQorLS0tIGZvbwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9lbWl0LWJsb2NrLXNjYWxhci1pbi1zaW1wbGUta2V5LWNvbnRleHQtYnVnLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvZW1pdC1ibG9jay1zY2FsYXItaW4tc2ltcGxlLWtleS1jb250ZXh0LWJ1Zy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczYmVkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1pdC1ibG9jay1zY2FsYXItaW4tc2ltcGxlLWtleS1jb250ZXh0LWJ1Zy5jYW5vbmljYWwKQEAgLTAsMCArMSw2IEBACislWUFNTCAxLjEKKy0tLSAhIW1hcAoreworICA/ICEhc3RyICJmb28iCisgIDogISFzdHIgImJhciIKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZW1pdC1ibG9jay1zY2FsYXItaW4tc2ltcGxlLWtleS1jb250ZXh0LWJ1Zy5kYXRhIGIvdGVzdHMvZGF0YS9lbWl0LWJsb2NrLXNjYWxhci1pbi1zaW1wbGUta2V5LWNvbnRleHQtYnVnLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiNDJiYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1pdC1ibG9jay1zY2FsYXItaW4tc2ltcGxlLWtleS1jb250ZXh0LWJ1Zy5kYXRhCkBAIC0wLDAgKzEsNCBAQAorPyB8LQorICBmb28KKzogfC0KKyAgYmFyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWctcHkzLmNvZGUgYi90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWctcHkzLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1ZGYwMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1pdHRpbmctdW5hY2NlcHRhYmxlLXVuaWNvZGUtY2hhcmFjdGVyLWJ1Zy1weTMuY29kZQpAQCAtMCwwICsxIEBACisiXHVkZDAwIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9lbWl0dGluZy11bmFjY2VwdGFibGUtdW5pY29kZS1jaGFyYWN0ZXItYnVnLXB5My5kYXRhIGIvdGVzdHMvZGF0YS9lbWl0dGluZy11bmFjY2VwdGFibGUtdW5pY29kZS1jaGFyYWN0ZXItYnVnLXB5My5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWRmMDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWctcHkzLmRhdGEKQEAgLTAsMCArMSBAQAorIlx1ZGQwMCIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZW1pdHRpbmctdW5hY2NlcHRhYmxlLXVuaWNvZGUtY2hhcmFjdGVyLWJ1Zy1weTMuc2tpcC1leHQgYi90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWctcHkzLnNraXAtZXh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWctcHkzLnNraXAtZXh0CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWcuY29kZSBiL3Rlc3RzL2RhdGEvZW1pdHRpbmctdW5hY2NlcHRhYmxlLXVuaWNvZGUtY2hhcmFjdGVyLWJ1Zy5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTI4NTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWcuY29kZQpAQCAtMCwwICsxIEBACit1Ilx1ZGQwMCIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZW1pdHRpbmctdW5hY2NlcHRhYmxlLXVuaWNvZGUtY2hhcmFjdGVyLWJ1Zy5kYXRhIGIvdGVzdHMvZGF0YS9lbWl0dGluZy11bmFjY2VwdGFibGUtdW5pY29kZS1jaGFyYWN0ZXItYnVnLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1ZGYwMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1pdHRpbmctdW5hY2NlcHRhYmxlLXVuaWNvZGUtY2hhcmFjdGVyLWJ1Zy5kYXRhCkBAIC0wLDAgKzEgQEAKKyJcdWRkMDAiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWcuc2tpcC1leHQgYi90ZXN0cy9kYXRhL2VtaXR0aW5nLXVuYWNjZXB0YWJsZS11bmljb2RlLWNoYXJhY3Rlci1idWcuc2tpcC1leHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1pdHRpbmctdW5hY2NlcHRhYmxlLXVuaWNvZGUtY2hhcmFjdGVyLWJ1Zy5za2lwLWV4dApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9lbW90aWNvbnMudW5pY29kZSBiL3Rlc3RzL2RhdGEvZW1vdGljb25zLnVuaWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjZGI2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1vdGljb25zLnVuaWNvZGUKQEAgLTAsMCArMSwxMCBAQAor8J+YgPCfmIHwn5iC8J+Yg/CfmITwn5iF8J+YhvCfmIcKK/CfmIjwn5iJ8J+YivCfmIvwn5iM8J+YjfCfmI7wn5iPCivwn5iQ8J+YkfCfmJLwn5iT8J+YlPCfmJXwn5iW8J+Ylwor8J+YmPCfmJnwn5ia8J+Ym/CfmJzwn5id8J+YnvCfmJ8KK/CfmKDwn5ih8J+YovCfmKPwn5ik8J+YpfCfmKbwn5inCivwn5io8J+YqfCfmKrwn5ir8J+YrPCfmK3wn5iu8J+Yrwor8J+YsPCfmLHwn5iy8J+Ys/CfmLTwn5i18J+YtvCfmLcKK/CfmLjwn5i58J+YuvCfmLvwn5i88J+YvfCfmL7wn5i/Civwn5mA8J+ZgfCfmYLwn5mD8J+ZhPCfmYXwn5mG8J+Zhwor8J+ZiPCfmYnwn5mK8J+Zi/CfmYzwn5mN8J+ZjvCfmY8KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZW1vdGljb25zMi51bmljb2RlIGIvdGVzdHMvZGF0YS9lbW90aWNvbnMyLnVuaWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQxZDNkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1vdGljb25zMi51bmljb2RlCkBAIC0wLDAgKzEgQEAKK/CfmIAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZW1wdHktYW5jaG9yLmVtaXR0ZXItZXJyb3IgYi90ZXN0cy9kYXRhL2VtcHR5LWFuY2hvci5lbWl0dGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjYzYjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2VtcHR5LWFuY2hvci5lbWl0dGVyLWVycm9yCkBAIC0wLDAgKzEsNSBAQAorLSAhU3RyZWFtU3RhcnQKKy0gIURvY3VtZW50U3RhcnQKKy0gIVNjYWxhciB7IGFuY2hvcjogJycsIHZhbHVlOiAnZm9vJyB9CistICFEb2N1bWVudEVuZAorLSAhU3RyZWFtRW5kCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2VtcHR5LWRvY3VtZW50LWJ1Zy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL2VtcHR5LWRvY3VtZW50LWJ1Zy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhNmNmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1wdHktZG9jdW1lbnQtYnVnLmNhbm9uaWNhbApAQCAtMCwwICsxIEBACisjIFRoaXMgWUFNTCBzdHJlYW0gY29udGFpbnMgbm8gWUFNTCBkb2N1bWVudHMuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2VtcHR5LWRvY3VtZW50LWJ1Zy5kYXRhIGIvdGVzdHMvZGF0YS9lbXB0eS1kb2N1bWVudC1idWcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9lbXB0eS1kb2N1bWVudC1idWcuZGF0YQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9lbXB0eS1kb2N1bWVudC1idWcuZW1wdHkgYi90ZXN0cy9kYXRhL2VtcHR5LWRvY3VtZW50LWJ1Zy5lbXB0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9lbXB0eS1kb2N1bWVudC1idWcuZW1wdHkKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZW1wdHktZG9jdW1lbnRzLnNpbmdsZS1sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2VtcHR5LWRvY3VtZW50cy5zaW5nbGUtbG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZGJhOGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2VtcHR5LWRvY3VtZW50cy5zaW5nbGUtbG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorLS0tICMgZmlyc3QgZG9jdW1lbnQKKy0tLSAjIHNlY29uZCBkb2N1bWVudApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9lbXB0eS1weXRob24tbW9kdWxlLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvZW1wdHktcHl0aG9uLW1vZHVsZS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkMzIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1wdHktcHl0aG9uLW1vZHVsZS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLS0tICEhcHl0aG9uOm1vZHVsZToKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZW1wdHktcHl0aG9uLW5hbWUubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9lbXB0eS1weXRob24tbmFtZS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2Mjk1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1wdHktcHl0aG9uLW5hbWUubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKKy0tLSAhIXB5dGhvbi9uYW1lOiBlbXB0eQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9lbXB0eS10YWctaGFuZGxlLmVtaXR0ZXItZXJyb3IgYi90ZXN0cy9kYXRhL2VtcHR5LXRhZy1oYW5kbGUuZW1pdHRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzVjODk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9lbXB0eS10YWctaGFuZGxlLmVtaXR0ZXItZXJyb3IKQEAgLTAsMCArMSw1IEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydCB7IHRhZ3M6IHsgJyc6ICdiYXInIH0gfQorLSAhU2NhbGFyIHsgdmFsdWU6ICdmb28nIH0KKy0gIURvY3VtZW50RW5kCistICFTdHJlYW1FbmQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZW1wdHktdGFnLXByZWZpeC5lbWl0dGVyLWVycm9yIGIvdGVzdHMvZGF0YS9lbXB0eS10YWctcHJlZml4LmVtaXR0ZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjMGU5NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1wdHktdGFnLXByZWZpeC5lbWl0dGVyLWVycm9yCkBAIC0wLDAgKzEsNSBAQAorLSAhU3RyZWFtU3RhcnQKKy0gIURvY3VtZW50U3RhcnQgeyB0YWdzOiB7ICchJzogJycgfSB9CistICFTY2FsYXIgeyB2YWx1ZTogJ2ZvbycgfQorLSAhRG9jdW1lbnRFbmQKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9lbXB0eS10YWcuZW1pdHRlci1lcnJvciBiL3Rlc3RzL2RhdGEvZW1wdHktdGFnLmVtaXR0ZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjYTU5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZW1wdHktdGFnLmVtaXR0ZXItZXJyb3IKQEAgLTAsMCArMSw1IEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydAorLSAhU2NhbGFyIHsgdGFnOiAnJywgdmFsdWU6ICdrZXknLCBpbXBsaWNpdDogW2ZhbHNlLGZhbHNlXSB9CistICFEb2N1bWVudEVuZAorLSAhU3RyZWFtRW5kCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2V4cGVjdGVkLWRvY3VtZW50LWVuZC5lbWl0dGVyLWVycm9yIGIvdGVzdHMvZGF0YS9leHBlY3RlZC1kb2N1bWVudC1lbmQuZW1pdHRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2JhYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9leHBlY3RlZC1kb2N1bWVudC1lbmQuZW1pdHRlci1lcnJvcgpAQCAtMCwwICsxLDYgQEAKKy0gIVN0cmVhbVN0YXJ0CistICFEb2N1bWVudFN0YXJ0CistICFTY2FsYXIgeyB2YWx1ZTogJ2RhdGEgMScgfQorLSAhU2NhbGFyIHsgdmFsdWU6ICdkYXRhIDInIH0KKy0gIURvY3VtZW50RW5kCistICFTdHJlYW1FbmQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtZG9jdW1lbnQtc3RhcnQuZW1pdHRlci1lcnJvciBiL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtZG9jdW1lbnQtc3RhcnQuZW1pdHRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U1NzVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9leHBlY3RlZC1kb2N1bWVudC1zdGFydC5lbWl0dGVyLWVycm9yCkBAIC0wLDAgKzEsNCBAQAorLSAhU3RyZWFtU3RhcnQKKy0gIU1hcHBpbmdTdGFydAorLSAhTWFwcGluZ0VuZAorLSAhU3RyZWFtRW5kCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2V4cGVjdGVkLW1hcHBpbmcubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9leHBlY3RlZC1tYXBwaW5nLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmFlZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9leHBlY3RlZC1tYXBwaW5nLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACistLS0gISFtYXAgW25vdCwgYSwgbWFwXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9leHBlY3RlZC1ub2RlLTEuZW1pdHRlci1lcnJvciBiL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtbm9kZS0xLmVtaXR0ZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZWNhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtbm9kZS0xLmVtaXR0ZXItZXJyb3IKQEAgLTAsMCArMSw0IEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydAorLSAhRG9jdW1lbnRFbmQKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9leHBlY3RlZC1ub2RlLTIuZW1pdHRlci1lcnJvciBiL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtbm9kZS0yLmVtaXR0ZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxZWUzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtbm9kZS0yLmVtaXR0ZXItZXJyb3IKQEAgLTAsMCArMSw3IEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydAorLSAhTWFwcGluZ1N0YXJ0CistICFTY2FsYXIgeyB2YWx1ZTogJ2tleScgfQorLSAhTWFwcGluZ0VuZAorLSAhRG9jdW1lbnRFbmQKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9leHBlY3RlZC1ub3RoaW5nLmVtaXR0ZXItZXJyb3IgYi90ZXN0cy9kYXRhL2V4cGVjdGVkLW5vdGhpbmcuZW1pdHRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmM1NGQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9leHBlY3RlZC1ub3RoaW5nLmVtaXR0ZXItZXJyb3IKQEAgLTAsMCArMSw0IEBACistICFTdHJlYW1TdGFydAorLSAhU3RyZWFtRW5kCistICFTdHJlYW1TdGFydAorLSAhU3RyZWFtRW5kCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2V4cGVjdGVkLXNjYWxhci5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2V4cGVjdGVkLXNjYWxhci5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMTcxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtc2NhbGFyLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACistLS0gISFzdHIgW25vdCBhIHNjYWxhcl0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtc2VxdWVuY2UubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9leHBlY3RlZC1zZXF1ZW5jZS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwNzRlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtc2VxdWVuY2UubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKKy0tLSAhIXNlcSB7Zm9vLCBiYXIsIGJhen0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZXhwZWN0ZWQtc3RyZWFtLXN0YXJ0LmVtaXR0ZXItZXJyb3IgYi90ZXN0cy9kYXRhL2V4cGVjdGVkLXN0cmVhbS1zdGFydC5lbWl0dGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MGRjMmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2V4cGVjdGVkLXN0cmVhbS1zdGFydC5lbWl0dGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorLSAhRG9jdW1lbnRTdGFydAorLSAhRG9jdW1lbnRFbmQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZXhwbGljaXQtZG9jdW1lbnQuc2luZ2xlLWxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvZXhwbGljaXQtZG9jdW1lbnQuc2luZ2xlLWxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmM2ZjhiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9leHBsaWNpdC1kb2N1bWVudC5zaW5nbGUtbG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsNCBAQAorLS0tCitmb286IGJhcgorLS0tCitmb286IGJhcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9mZXRjaC1jb21wbGV4LXZhbHVlLWJ1Zy5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ZldGNoLWNvbXBsZXgtdmFsdWUtYnVnLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWZhYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9mZXRjaC1jb21wbGV4LXZhbHVlLWJ1Zy5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACis/ICJmb28iCisgOiAiYmFyIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9mbG9hdC1yZXByZXNlbnRlci0yLjMtYnVnLmNvZGUgYi90ZXN0cy9kYXRhL2Zsb2F0LXJlcHJlc2VudGVyLTIuMy1idWcuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGRiODM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9mbG9hdC1yZXByZXNlbnRlci0yLjMtYnVnLmNvZGUKQEAgLTAsMCArMSw3IEBACit7CisjICAgIDAuMDogMCwKKyAgICAxLjA6IDEsCisgICAgMWUzMDAwMDA6ICsxMCwKKyAgICAtMWUzMDAwMDA6IC0xMCwKKyAgICAxZTMwMDAwMC8xZTMwMDAwMDogMTAwLAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9mbG9hdC1yZXByZXNlbnRlci0yLjMtYnVnLmRhdGEgYi90ZXN0cy9kYXRhL2Zsb2F0LXJlcHJlc2VudGVyLTIuMy1idWcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmQxNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9mbG9hdC1yZXByZXNlbnRlci0yLjMtYnVnLmRhdGEKQEAgLTAsMCArMSw1IEBACisjMC4wOiAgICMgaGFzaCgwKSA9PSBoYXNoKG5hbikgYW5kIDAgPT0gbmFuIGluIFB5dGhvbiAyLjMKKzEuMDogMQorKy5pbmY6IDEwCistLmluZjogLTEwCisubmFuOiAxMDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZmxvYXQuZGF0YSBiL3Rlc3RzL2RhdGEvZmxvYXQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjRkNWRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9mbG9hdC5kYXRhCkBAIC0wLDAgKzEsNiBAQAorLSA2Ljg1MjMwMTVlKzUKKy0gNjg1LjIzMF8xNWUrMDMKKy0gNjg1XzIzMC4xNQorLSAxOTA6MjA6MzAuMTUKKy0gLS5pbmYKKy0gLk5hTgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9mbG9hdC5kZXRlY3QgYi90ZXN0cy9kYXRhL2Zsb2F0LmRldGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTEyMzQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9mbG9hdC5kZXRlY3QKQEAgLTAsMCArMSBAQAordGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvZm9yYmlkZGVuLWVudHJ5LmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvZm9yYmlkZGVuLWVudHJ5LmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmUzMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9mb3JiaWRkZW4tZW50cnkubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAordGVzdDogLSBmb28KKyAgICAgIC0gYmFyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ZvcmJpZGRlbi1rZXkubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9mb3JiaWRkZW4ta2V5LmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTliNDcxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9mb3JiaWRkZW4ta2V5LmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKK3Rlc3Q6ID8gZm9vCisgICAgICA6IGJhcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9mb3JiaWRkZW4tdmFsdWUubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9mb3JiaWRkZW4tdmFsdWUubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZDdjZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ZvcmJpZGRlbi12YWx1ZS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAordGVzdDoga2V5OiB2YWx1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbXBsaWNpdC1kb2N1bWVudC5zaW5nbGUtbG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbXBsaWNpdC1kb2N1bWVudC5zaW5nbGUtbG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzlhNWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ltcGxpY2l0LWRvY3VtZW50LnNpbmdsZS1sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwzIEBACitmb286IGJhcgorLS0tCitmb286IGJhcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnQuZGF0YSBiL3Rlc3RzL2RhdGEvaW50LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ZDM3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW50LmRhdGEKQEAgLTAsMCArMSw2IEBACistIDY4NTIzMAorLSArNjg1XzIzMAorLSAwMjQ3MjI1NgorLSAweF8wQV83NF9BRQorLSAwYjEwMTBfMDExMV8wMTAwXzEwMTBfMTExMAorLSAxOTA6MjA6MzAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW50LmRldGVjdCBiL3Rlc3RzL2RhdGEvaW50LmRldGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzVjOWViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnQuZGV0ZWN0CkBAIC0wLDAgKzEgQEAKK3RhZzp5YW1sLm9yZywyMDAyOmludApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLWFuY2hvci0xLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1hbmNob3ItMS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmN2QwZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1hbmNob3ItMS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLS0tICY/ICBmb28gIyB3ZSBhbGxvdyBvbmx5IGFzY2lpIGFuZCBudW1lcmljIGNoYXJhY3RlcnMgaW4gYW5jaG9yIG5hbWVzLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLWFuY2hvci0yLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1hbmNob3ItMi5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjNGZmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1hbmNob3ItMi5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSw4IEBACistLS0KKy0gWworICAgICZjb3JyZWN0IGZvbywKKyAgICAqY29ycmVjdCwKKyAgICAqY29ycmVjdF0gICAjIHN0aWxsIGNvcnJlY3QKKy0gKmNvcnJlY3Q6IHN0aWxsIGNvcnJlY3QKKy0gJmNvcnJlY3Qtb3Itbm90W2ZvbywgYmFyXQorCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtYW5jaG9yLmVtaXR0ZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtYW5jaG9yLmVtaXR0ZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QyYTgxNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1hbmNob3IuZW1pdHRlci1lcnJvcgpAQCAtMCwwICsxLDUgQEAKKy0gIVN0cmVhbVN0YXJ0CistICFEb2N1bWVudFN0YXJ0CistICFTY2FsYXIgeyBhbmNob3I6ICc1KjU9MjUnLCB2YWx1ZTogJ2ZvbycgfQorLSAhRG9jdW1lbnRFbmQKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLWJhc2U2NC1kYXRhLTIubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLWJhc2U2NC1kYXRhLTIubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NTNhNGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtYmFzZTY0LWRhdGEtMi5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACistLS0gISFiaW5hcnkKKyAgICDQtNCy0L7QuNGH0L3Ri9C1INC00LDQvdC90YvQtSDQsiBiYXNlNjQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1iYXNlNjQtZGF0YS5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtYmFzZTY0LWRhdGEubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OGFiYmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtYmFzZTY0LWRhdGEubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorLS0tICEhYmluYXJ5CisgICAgYmluYXJ5IGRhdGEgZW5jb2RlZCBpbiBiYXNlNjQgc2hvdWxkIGJlIGhlcmUuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtYmxvY2stc2NhbGFyLWluZGljYXRvci5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtYmxvY2stc2NhbGFyLWluZGljYXRvci5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhNmRiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1ibG9jay1zY2FsYXItaW5kaWNhdG9yLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKKy0tLSA+IHdoYXQgaXMgdGhpcz8gICMgYSBjb21tZW50CitkYXRhCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtY2hhcmFjdGVyLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1jaGFyYWN0ZXIubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjg3YjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtY2hhcmFjdGVyLmxvYWRlci1lcnJvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtY2hhcmFjdGVyLnN0cmVhbS1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1jaGFyYWN0ZXIuc3RyZWFtLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWZhY2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtY2hhcmFjdGVyLnN0cmVhbS1lcnJvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtZGlyZWN0aXZlLWxpbmUubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLWRpcmVjdGl2ZS1saW5lLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODkyZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLWRpcmVjdGl2ZS1saW5lLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKKyVZQU1MICAgMS4xID8gICAjIGV4dHJhIHN5bWJvbAorLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtZGlyZWN0aXZlLW5hbWUtMS5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtZGlyZWN0aXZlLW5hbWUtMS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1kaXJlY3RpdmUtbmFtZS0xLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKKyUgICAjIG5vIG5hbWUgYXQgYWxsCistLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1kaXJlY3RpdmUtbmFtZS0yLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1kaXJlY3RpdmUtbmFtZS0yLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzMyYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLWRpcmVjdGl2ZS1uYW1lLTIubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorJWludmFsaWQtY2hhcmFjdGVyczppbi1kaXJlY3RpdmUgbmFtZQorLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtZXNjYXBlLWNoYXJhY3Rlci5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtZXNjYXBlLWNoYXJhY3Rlci5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1YWI3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1lc2NhcGUtY2hhcmFjdGVyLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACisic29tZSBlc2NhcGUgY2hhcmFjdGVycyBhcmUgXG5jb3JyZWN0LCBidXQgdGhpcyBvbmUgXD9cbmlzIG5vdFxuIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLWVzY2FwZS1udW1iZXJzLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1lc2NhcGUtbnVtYmVycy5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0ZWM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1lc2NhcGUtbnVtYmVycy5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorImhtLi4uLiBcdTEyMz8iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtaW5kZW50YXRpb24taW5kaWNhdG9yLTEubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLWluZGVudGF0aW9uLWluZGljYXRvci0xLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NkMTJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLWluZGVudGF0aW9uLWluZGljYXRvci0xLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKKy0tLSA+MCAgIyBub3QgdmFsaWQKK2RhdGEKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1pbmRlbnRhdGlvbi1pbmRpY2F0b3ItMi5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtaW5kZW50YXRpb24taW5kaWNhdG9yLTIubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZmI2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtaW5kZW50YXRpb24taW5kaWNhdG9yLTIubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorLS0tID4tMAorZGF0YQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLWl0ZW0td2l0aG91dC10cmFpbGluZy1icmVhay5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtaXRlbS13aXRob3V0LXRyYWlsaW5nLWJyZWFrLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGNmNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLWl0ZW0td2l0aG91dC10cmFpbGluZy1icmVhay5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACistCistMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1tZXJnZS0xLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1tZXJnZS0xLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzNjMjg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLW1lcmdlLTEubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorZm9vOiBiYXIKKzw8OiBiYXoKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1tZXJnZS0yLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1tZXJnZS0yLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTg4NjE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLW1lcmdlLTIubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorZm9vOiBiYXIKKzw8OiBbeDogMSwgeTogMiwgeiwgdDogNF0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1vbWFwLTEubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLW9tYXAtMS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg2MzM5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1vbWFwLTEubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMyBAQAorLS0tICEhb21hcAorZm9vOiBiYXIKK2JhejogYmF0CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtb21hcC0yLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1vbWFwLTIubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzdkZmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtb21hcC0yLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDMgQEAKKy0tLSAhIW9tYXAKKy0gZm9vOiBiYXIKKy0gYmF6CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtb21hcC0zLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1vbWFwLTMubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNGY1MGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtb21hcC0zLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDQgQEAKKy0tLSAhIW9tYXAKKy0gZm9vOiBiYXIKKy0gYmF6OiBiYXIKKyAgYmFyOiBiYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1wYWlycy0xLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1wYWlycy0xLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmQxOWFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXBhaXJzLTEubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMyBAQAorLS0tICEhcGFpcnMKK2ZvbzogYmFyCitiYXo6IGJhdApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXBhaXJzLTIubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXBhaXJzLTIubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzg5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtcGFpcnMtMi5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwzIEBACistLS0gISFwYWlycworLSBmb286IGJhcgorLSBiYXoKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1wYWlycy0zLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1wYWlycy0zLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQ3NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXBhaXJzLTMubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsNCBAQAorLS0tICEhcGFpcnMKKy0gZm9vOiBiYXIKKy0gYmF6OiBiYXIKKyAgYmFyOiBiYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tYnl0ZXMtMi1weTMubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1ieXRlcy0yLXB5My5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzYWY1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tYnl0ZXMtMi1weTMubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorLS0tICEhcHl0aG9uL2J5dGVzCisgICAg0LTQstC+0LjRh9C90YvQtSDQtNCw0L3QvdGL0LUg0LIgYmFzZTY0CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLWJ5dGVzLXB5My5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLWJ5dGVzLXB5My5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5ZGZkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tYnl0ZXMtcHkzLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKKy0tLSAhIXB5dGhvbi9ieXRlcworICAgIGJpbmFyeSBkYXRhIGVuY29kZWQgaW4gYmFzZTY0IHNob3VsZCBiZSBoZXJlLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1tb2R1bGUta2luZC5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLW1vZHVsZS1raW5kLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjcxY2I1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1tb2R1bGUta2luZC5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLS0tICEhcHl0aG9uL21vZHVsZTpzeXMgeyBtdXN0LCBiZSwgc2NhbGFyIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tbW9kdWxlLXZhbHVlLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tbW9kdWxlLXZhbHVlLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjc5N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1tb2R1bGUtdmFsdWUubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKKy0tLSAhIXB5dGhvbi9tb2R1bGU6c3lzICJub24tZW1wdHkgdmFsdWUiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLW1vZHVsZS5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLW1vZHVsZS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyNDA3MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tbW9kdWxlLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACistLS0gISFweXRob24vbW9kdWxlOm5vLnN1Y2gubW9kdWxlCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLW5hbWUta2luZC5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLW5hbWUta2luZC5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmOGViNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tbmFtZS1raW5kLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACistLS0gISFweXRob24vbmFtZTpzeXMubW9kdWxlcyB7fQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1uYW1lLW1vZHVsZS5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLW5hbWUtbW9kdWxlLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY2ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1uYW1lLW1vZHVsZS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLS0tICEhcHl0aG9uL25hbWU6c3lzLm1vZHVsZXMua2V5cwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1uYW1lLW9iamVjdC5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtcHl0aG9uLW5hbWUtb2JqZWN0LmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGYzODZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1uYW1lLW9iamVjdC5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLS0tICEhcHl0aG9uL25hbWU6b3MucGF0aC5ybV9yZgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXB5dGhvbi1uYW1lLXZhbHVlLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tbmFtZS12YWx1ZS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlMTQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1weXRob24tbmFtZS12YWx1ZS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLS0tICEhcHl0aG9uL25hbWU6c3lzLm1vZHVsZXMgNQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXNpbXBsZS1rZXkubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXNpbXBsZS1rZXkubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGRlZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtc2ltcGxlLWtleS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwzIEBACitrZXk6IHZhbHVlCitpbnZhbGlkIHNpbXBsZSBrZXkKK25leHQga2V5OiBuZXh0IHZhbHVlCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtc2luZ2xlLXF1b3RlLWJ1Zy5jb2RlIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXNpbmdsZS1xdW90ZS1idWcuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTU4OTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXNpbmdsZS1xdW90ZS1idWcuY29kZQpAQCAtMCwwICsxIEBACitbImZvbyAnYmFyJyIsICJmb29cbidiYXInIl0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1zaW5nbGUtcXVvdGUtYnVnLmRhdGEgYi90ZXN0cy9kYXRhL2ludmFsaWQtc2luZ2xlLXF1b3RlLWJ1Zy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZWY3YWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtc2luZ2xlLXF1b3RlLWJ1Zy5kYXRhCkBAIC0wLDAgKzEsMiBAQAorLSAiZm9vICdiYXInIgorLSAiZm9vXG4nYmFyJyIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC1zdGFydGluZy1jaGFyYWN0ZXIubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXN0YXJ0aW5nLWNoYXJhY3Rlci5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4MWM2MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC1zdGFydGluZy1jaGFyYWN0ZXIubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKK0BAQEBAQEBAQEBAQEBAQEBAQEAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC10YWctMS5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLTEubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OGNkMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLTEubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKKy0gITxmb28jYmFyPiBiYXoKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC10YWctMi5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLTIubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzY3MDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLTIubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKKy0gIXByZWZpeCFmb28jYmFyIGJhegpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXRhZy1kaXJlY3RpdmUtaGFuZGxlLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC10YWctZGlyZWN0aXZlLWhhbmRsZS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiNWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC10YWctZGlyZWN0aXZlLWhhbmRsZS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACislVEFHICEhISAhISEKKy0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXRhZy1kaXJlY3RpdmUtcHJlZml4LmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC10YWctZGlyZWN0aXZlLXByZWZpeC5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiNDgyYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC10YWctZGlyZWN0aXZlLXByZWZpeC5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACislVEFHICAgICEgICB0YWc6enouY29tL2ZvbyNiYXIgICMgJyMnIGlzIG5vdCBhbGxvd2VkIGluIFVSTHMKKy0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXRhZy1oYW5kbGUtMS5lbWl0dGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXRhZy1oYW5kbGUtMS5lbWl0dGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZGY5YTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLWhhbmRsZS0xLmVtaXR0ZXItZXJyb3IKQEAgLTAsMCArMSw1IEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydCB7IHRhZ3M6IHsgJyFmb28nOiAnYmFyJyB9IH0KKy0gIVNjYWxhciB7IHZhbHVlOiAnZm9vJyB9CistICFEb2N1bWVudEVuZAorLSAhU3RyZWFtRW5kCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLWhhbmRsZS0xLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC10YWctaGFuZGxlLTEubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGQxNDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLWhhbmRsZS0xLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKKyVUQUcgICAgZm9vIGJhcgorLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLWhhbmRsZS0yLmVtaXR0ZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLWhhbmRsZS0yLmVtaXR0ZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4MzFkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC10YWctaGFuZGxlLTIuZW1pdHRlci1lcnJvcgpAQCAtMCwwICsxLDUgQEAKKy0gIVN0cmVhbVN0YXJ0CistICFEb2N1bWVudFN0YXJ0IHsgdGFnczogeyAnISEhJzogJ2JhcicgfSB9CistICFTY2FsYXIgeyB2YWx1ZTogJ2ZvbycgfQorLSAhRG9jdW1lbnRFbmQKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXRhZy1oYW5kbGUtMi5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtdGFnLWhhbmRsZS0yLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM3ZjBlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXRhZy1oYW5kbGUtMi5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACislVEFHICAgICFmb28gICAgYmFyCistLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC11cmktZXNjYXBlcy0xLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC11cmktZXNjYXBlcy0xLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmVjYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXVyaS1lc2NhcGVzLTEubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKKy0tLSAhPHRhZzoleD95PiBmb28KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC11cmktZXNjYXBlcy0yLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC11cmktZXNjYXBlcy0yLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODllOGY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXVyaS1lc2NhcGVzLTIubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKKy0tLSAhPCVGRj4gZm9vCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtdXJpLWVzY2FwZXMtMy5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtdXJpLWVzY2FwZXMtMy5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlNGNiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC11cmktZXNjYXBlcy0zLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACistLS0gITxmb28lZDAlYWYlZDAlYWYlZDBiYXI+IGJhegpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXVyaS5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtdXJpLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjMwN2UwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXVyaS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLS0tICFmb28hICAgYmFyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQtdXRmOC1ieXRlLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC11dGY4LWJ5dGUubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNThjNzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQtdXRmOC1ieXRlLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDY2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0ludmFsaWQgYnl0ZSAoJ1x4RkYnKTog/yA8LS0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXV0ZjgtYnl0ZS5zdHJlYW0tZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQtdXRmOC1ieXRlLnN0cmVhbS1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTU4YzcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXV0ZjgtYnl0ZS5zdHJlYW0tZXJyb3IKQEAgLTAsMCArMSw2NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitJbnZhbGlkIGJ5dGUgKCdceEZGJyk6IP8gPC0tCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC15YW1sLWRpcmVjdGl2ZS12ZXJzaW9uLTEubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tMS5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliNGUzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC15YW1sLWRpcmVjdGl2ZS12ZXJzaW9uLTEubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMyBAQAorIyBObyB2ZXJzaW9uIGF0IGFsbC4KKyVZQU1MCistLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC15YW1sLWRpcmVjdGl2ZS12ZXJzaW9uLTIubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tMi5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhNzc0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC15YW1sLWRpcmVjdGl2ZS12ZXJzaW9uLTIubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorJVlBTUwgICAxZS01CistLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvaW52YWxpZC15YW1sLWRpcmVjdGl2ZS12ZXJzaW9uLTMubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tMy5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1ZTc4NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvaW52YWxpZC15YW1sLWRpcmVjdGl2ZS12ZXJzaW9uLTMubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMiBAQAorJVlBTUwgMS4KKy0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tNC5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQteWFtbC1kaXJlY3RpdmUtdmVyc2lvbi00LmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzVjYTgyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tNC5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACislWUFNTCAxLjEzMi40MzUKKy0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tNS5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQteWFtbC1kaXJlY3RpdmUtdmVyc2lvbi01LmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzJiNDlmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tNS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACislWUFNTCBBLjAKKy0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tNi5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL2ludmFsaWQteWFtbC1kaXJlY3RpdmUtdmVyc2lvbi02LmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU3MTRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9pbnZhbGlkLXlhbWwtZGlyZWN0aXZlLXZlcnNpb24tNi5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACislWUFNTCAxMjMuQworLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2ludmFsaWQteWFtbC12ZXJzaW9uLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvaW52YWxpZC15YW1sLXZlcnNpb24ubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMDE5NDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL2ludmFsaWQteWFtbC12ZXJzaW9uLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKKyVZQU1MICAgMi4wCistLS0gZm9vCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL2xhdGluLnVuaWNvZGUgYi90ZXN0cy9kYXRhL2xhdGluLnVuaWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiNzk5YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvbGF0aW4udW5pY29kZQpAQCAtMCwwICsxLDM4NCBAQAorQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esKqwrXCusOAw4HDgsODw4TDhcOGw4fDiMOJw4oKK8OLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7jDucO6w7vDvMO9w77Dv8SAxIHEgsSDxITEhcSGxIfEiMSJxIrEi8SMxI3EjgorxI/EkMSRxJLEk8SUxJXElsSXxJjEmcSaxJvEnMSdxJ7En8SgxKHEosSjxKTEpcSmxKfEqMSpxKrEq8SsxK3ErsSvxLDEscSyxLPEtMS1xLbEt8S4xLnEusS7xLzEvcS+xL/FgMWBxYLFg8WExYXFhsWHxYjFicWKxYvFjMWNxY7Fj8WQCivFkcWSxZPFlMWVxZbFl8WYxZnFmsWbxZzFncWexZ/FoMWhxaLFo8WkxaXFpsWnxajFqcWqxavFrMWtxa7Fr8WwxbHFssWzxbTFtcW2xbfFuMW5xbrFu8W8xb3FvsW/xoDGgcaCxoPGhMaFxobGh8aIxonGisaLxozGjcaOxo/GkMaRxpIKK8aTxpTGlcaWxpfGmMaZxprGm8acxp3GnsafxqDGocaixqPGpMalxqbGp8aoxqnGqsarxqzGrcauxq/GsMaxxrLGs8a0xrXGtsa3xrjGuca6xrzGvca+xr/HhMeGx4fHiceKx4zHjceOx4/HkMeRx5LHk8eUx5XHlseXx5jHmceax5vHnAorx53Hnsefx6DHoceix6PHpMelx6bHp8eox6nHqserx6zHrceux6/HsMexx7PHtMe1x7bHt8e4x7nHuse7x7zHvce+x7/IgMiByILIg8iEyIXIhsiHyIjIiciKyIvIjMiNyI7Ij8iQyJHIksiTyJTIlciWyJfImMiZyJrIm8icyJ3InsifCivIoMihyKLIo8ikyKXIpsinyKjIqciqyKvIrMityK7Ir8iwyLHIssizyLTItci2yLfIuMi5yLrIu8i8yL3Ivsi/yYDJgcmQyZHJksmTyZTJlcmWyZfJmMmZyZrJm8mcyZ3JnsmfyaDJocmiyaPJpMmlyabJp8moyanJqsmryazJrcmuya8KK8mwybHJssmzybTJtcm2ybfJuMm5ybrJu8m8yb3Jvsm/yoDKgcqCyoPKhMqFyobKh8qIyonKisqLyozKjcqOyo/KkMqRypLKk8qUypXKlsqXypjKmcqaypvKnMqdyp7Kn8qgyqHKosqjyqTKpcqmyqfKqMqpyqrKq8qsyq3KrsqvzobOiAorzonOis6Mzo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+NCivPjs+Qz5HPks+Tz5TPlc+Wz5fPmM+Zz5rPm8+cz53Pns+fz6DPoc+iz6PPpM+lz6bPp8+oz6nPqs+rz6zPrc+uz6/PsM+xz7LPs8+0z7XPt8+4z7nPus+7z7zPvc++z7/QgNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjNCN0I7Qj9CQ0JEKK9CS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/RkNGR0ZLRkwor0ZTRldGW0ZfRmNGZ0ZrRm9Gc0Z3RntGf0aDRodGi0aPRpNGl0abRp9Go0anRqtGr0azRrdGu0a/RsNGx0bLRs9G00bXRttG30bjRudG60bvRvNG90b7Rv9KA0oHSitKL0ozSjdKO0o/SkNKR0pLSk9KU0pXSltKX0pjSmdKa0pvSnNKdCivSntKf0qDSodKi0qPSpNKl0qbSp9Ko0qnSqtKr0qzSrdKu0q/SsNKx0rLSs9K00rXSttK30rjSudK60rvSvNK90r7Sv9OA04HTgtOD04TThdOG04fTiNOJ04rTi9OM043TjtOQ05HTktOT05TTldOW05fTmNOZ05rTm9Oc053TntOf06AKK9Oh06LTo9Ok06XTptOn06jTqdOq06vTrNOt067Tr9Ow07HTstOz07TTtdO207fTuNO51IDUgdSC1IPUhNSF1IbUh9SI1InUitSL1IzUjdSO1I/UsdSy1LPUtNS11LbUt9S41LnUutS71LzUvdS+1L/VgNWB1YLVg9WE1YXVhtWH1YjViQor1YrVi9WM1Y3VjtWP1ZDVkdWS1ZPVlNWV1ZbVodWi1aPVpNWl1abVp9Wo1anVqtWr1azVrdWu1a/VsNWx1bLVs9W01bXVttW31bjVudW61bvVvNW91b7Vv9aA1oHWgtaD1oTWhdaG1ofhgqDhgqHhgqLhgqPhgqThgqXhgqbhgqfhgqjhgqnhgqrhgqvhgqzhgq0KK+GCruGCr+GCsOGCseGCsuGCs+GCtOGCteGCtuGCt+GCuOGCueGCuuGCu+GCvOGCveGCvuGCv+GDgOGDgeGDguGDg+GDhOGDheG0gOG0geG0guG0g+G0hOG0heG0huG0h+G0iOG0ieG0iuG0i+G0jOG0jeG0juG0j+G0kOG0keG0kuG0k+G0lOG0leG0luG0l+G0mOG0meG0muG0m+G0nOG0neG0nuG0n+G0oOG0oeG0ouG0o+G0pOG0peG0puG0p+G0qOG0qQor4bSq4bSr4bWi4bWj4bWk4bWl4bWm4bWn4bWo4bWp4bWq4bWr4bWs4bWt4bWu4bWv4bWw4bWx4bWy4bWz4bW04bW14bW24bW34bW54bW64bW74bW84bW94bW+4bW/4baA4baB4baC4baD4baE4baF4baG4baH4baI4baJ4baK4baL4baM4baN4baO4baP4baQ4baR4baS4baT4baU4baV4baW4baX4baY4baZ4baa4biA4biB4biC4biD4biE4biF4biG4biHCivhuIjhuInhuIrhuIvhuIzhuI3huI7huI/huJDhuJHhuJLhuJPhuJThuJXhuJbhuJfhuJjhuJnhuJrhuJvhuJzhuJ3huJ7huJ/huKDhuKHhuKLhuKPhuKThuKXhuKbhuKfhuKjhuKnhuKrhuKvhuKzhuK3huK7huK/huLDhuLHhuLLhuLPhuLThuLXhuLbhuLfhuLjhuLnhuLrhuLvhuLzhuL3huL7huL/huYDhuYHhuYLhuYPhuYThuYXhuYbhuYfhuYjhuYkKK+G5iuG5i+G5jOG5jeG5juG5j+G5kOG5keG5kuG5k+G5lOG5leG5luG5l+G5mOG5meG5muG5m+G5nOG5neG5nuG5n+G5oOG5oeG5ouG5o+G5pOG5peG5puG5p+G5qOG5qeG5quG5q+G5rOG5reG5ruG5r+G5sOG5seG5suG5s+G5tOG5teG5tuG5t+G5uOG5ueG5uuG5u+G5vOG5veG5vuG5v+G6gOG6geG6guG6g+G6hOG6heG6huG6h+G6iOG6ieG6iuG6iwor4bqM4bqN4bqO4bqP4bqQ4bqR4bqS4bqT4bqU4bqV4bqW4bqX4bqY4bqZ4bqa4bqb4bqg4bqh4bqi4bqj4bqk4bql4bqm4bqn4bqo4bqp4bqq4bqr4bqs4bqt4bqu4bqv4bqw4bqx4bqy4bqz4bq04bq14bq24bq34bq44bq54bq64bq74bq84bq94bq+4bq/4buA4buB4buC4buD4buE4buF4buG4buH4buI4buJ4buK4buL4buM4buN4buO4buP4buQ4buRCivhu5Lhu5Phu5Thu5Xhu5bhu5fhu5jhu5nhu5rhu5vhu5zhu53hu57hu5/hu6Dhu6Hhu6Lhu6Phu6Thu6Xhu6bhu6fhu6jhu6nhu6rhu6vhu6zhu63hu67hu6/hu7Dhu7Hhu7Lhu7Phu7Thu7Xhu7bhu7fhu7jhu7nhvIDhvIHhvILhvIPhvIThvIXhvIbhvIfhvIjhvInhvIrhvIvhvIzhvI3hvI7hvI/hvJDhvJHhvJLhvJPhvJThvJXhvJjhvJnhvJrhvJsKK+G8nOG8neG8oOG8oeG8ouG8o+G8pOG8peG8puG8p+G8qOG8qeG8quG8q+G8rOG8reG8ruG8r+G8sOG8seG8suG8s+G8tOG8teG8tuG8t+G8uOG8ueG8uuG8u+G8vOG8veG8vuG8v+G9gOG9geG9guG9g+G9hOG9heG9iOG9ieG9iuG9i+G9jOG9jeG9kOG9keG9kuG9k+G9lOG9leG9luG9l+G9meG9m+G9neG9n+G9oOG9oeG9ouG9o+G9pOG9peG9puG9pwor4b2o4b2p4b2q4b2r4b2s4b2t4b2u4b2v4b2w4b2x4b2y4b2z4b204b214b224b234b244b254b264b274b284b294b6A4b6B4b6C4b6D4b6E4b6F4b6G4b6H4b6Q4b6R4b6S4b6T4b6U4b6V4b6W4b6X4b6g4b6h4b6i4b6j4b6k4b6l4b6m4b6n4b6w4b6x4b6y4b6z4b604b624b634b644b654b664b674b6+4b+C4b+D4b+E4b+G4b+H4b+I4b+J4b+KCivhv4vhv5Dhv5Hhv5Lhv5Phv5bhv5fhv5jhv5nhv5rhv5vhv6Dhv6Hhv6Lhv6Phv6Thv6Xhv6bhv6fhv6jhv6nhv6rhv6vhv6zhv7Lhv7Phv7Thv7bhv7fhv7jhv7nhv7rhv7vigbHigb/ihILihIfihIrihIvihIzihI3ihI7ihI/ihJDihJHihJLihJPihJXihJnihJrihJvihJzihJ3ihKTihKbihKjihKrihKvihKzihK3ihK/ihLDihLHihLPihLTihLkKK0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXrCqsK1wrrDgMOBw4LDg8OEw4XDhsOHw4jDicOKCivDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO4w7nDusO7w7zDvcO+w7/EgMSBxILEg8SExIXEhsSHxIjEicSKxIvEjMSNxI4KK8SPxJDEkcSSxJPElMSVxJbEl8SYxJnEmsSbxJzEncSexJ/EoMShxKLEo8SkxKXEpsSnxKjEqcSqxKvErMStxK7Er8SwxLHEssSzxLTEtcS2xLfEuMS5xLrEu8S8xL3EvsS/xYDFgcWCxYPFhMWFxYbFh8WIxYnFisWLxYzFjcWOxY/FkAorxZHFksWTxZTFlcWWxZfFmMWZxZrFm8WcxZ3FnsWfxaDFocWixaPFpMWlxabFp8WoxanFqsWrxazFrcWuxa/FsMWxxbLFs8W0xbXFtsW3xbjFucW6xbvFvMW9xb7Fv8aAxoHGgsaDxoTGhcaGxofGiMaJxorGi8aMxo3GjsaPxpDGkcaSCivGk8aUxpXGlsaXxpjGmcaaxpvGnMadxp7Gn8agxqHGosajxqTGpcamxqfGqMapxqrGq8asxq3GrsavxrDGscayxrPGtMa1xrbGt8a4xrnGusa8xr3Gvsa/x4THhseHx4nHiseMx43HjsePx5DHkceSx5PHlMeVx5bHl8eYx5nHmsebx5wKK8edx57Hn8egx6HHosejx6THpcemx6fHqMepx6rHq8esx63Hrsevx7DHscezx7THtce2x7fHuMe5x7rHu8e8x73Hvse/yIDIgciCyIPIhMiFyIbIh8iIyInIisiLyIzIjciOyI/IkMiRyJLIk8iUyJXIlsiXyJjImciayJvInMidyJ7InworyKDIociiyKPIpMilyKbIp8ioyKnIqsiryKzIrciuyK/IsMixyLLIs8i0yLXItsi3yLjIuci6yLvIvMi9yL7Iv8mAyYHJkMmRyZLJk8mUyZXJlsmXyZjJmcmayZvJnMmdyZ7Jn8mgyaHJosmjyaTJpcmmyafJqMmpyarJq8msya3JrsmvCivJsMmxybLJs8m0ybXJtsm3ybjJucm6ybvJvMm9yb7Jv8qAyoHKgsqDyoTKhcqGyofKiMqJyorKi8qMyo3KjsqPypDKkcqSypPKlMqVypbKl8qYypnKmsqbypzKncqeyp/KoMqhyqLKo8qkyqXKpsqnyqjKqcqqyqvKrMqtyq7Kr86GzogKK86JzorOjM6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjQorz47PkM+Rz5LPk8+Uz5XPls+Xz5jPmc+az5vPnM+dz57Pn8+gz6HPos+jz6TPpc+mz6fPqM+pz6rPq8+sz63Prs+vz7DPsc+yz7PPtM+1z7fPuM+5z7rPu8+8z73Pvs+/0IDQgdCC0IPQhNCF0IbQh9CI0InQitCL0IzQjdCO0I/QkNCRCivQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0ZDRkdGS0ZMKK9GU0ZXRltGX0ZjRmdGa0ZvRnNGd0Z7Rn9Gg0aHRotGj0aTRpdGm0afRqNGp0arRq9Gs0a3RrtGv0bDRsdGy0bPRtNG10bbRt9G40bnRutG70bzRvdG+0b/SgNKB0orSi9KM0o3SjtKP0pDSkdKS0pPSlNKV0pbSl9KY0pnSmtKb0pzSnQor0p7Sn9Kg0qHSotKj0qTSpdKm0qfSqNKp0qrSq9Ks0q3SrtKv0rDSsdKy0rPStNK10rbSt9K40rnSutK70rzSvdK+0r/TgNOB04LTg9OE04XThtOH04jTidOK04vTjNON047TkNOR05LTk9OU05XTltOX05jTmdOa05vTnNOd057Tn9OgCivTodOi06PTpNOl06bTp9Oo06nTqtOr06zTrdOu06/TsNOx07LTs9O007XTttO307jTudSA1IHUgtSD1ITUhdSG1IfUiNSJ1IrUi9SM1I3UjtSP1LHUstSz1LTUtdS21LfUuNS51LrUu9S81L3UvtS/1YDVgdWC1YPVhNWF1YbVh9WI1YkKK9WK1YvVjNWN1Y7Vj9WQ1ZHVktWT1ZTVldWW1aHVotWj1aTVpdWm1afVqNWp1arVq9Ws1a3VrtWv1bDVsdWy1bPVtNW11bbVt9W41bnVutW71bzVvdW+1b/WgNaB1oLWg9aE1oXWhtaH4YKg4YKh4YKi4YKj4YKk4YKl4YKm4YKn4YKo4YKp4YKq4YKr4YKs4YKtCivhgq7hgq/hgrDhgrHhgrLhgrPhgrThgrXhgrbhgrfhgrjhgrnhgrrhgrvhgrzhgr3hgr7hgr/hg4Dhg4Hhg4Lhg4Phg4Thg4XhtIDhtIHhtILhtIPhtIThtIXhtIbhtIfhtIjhtInhtIrhtIvhtIzhtI3htI7htI/htJDhtJHhtJLhtJPhtJThtJXhtJbhtJfhtJjhtJnhtJrhtJvhtJzhtJ3htJ7htJ/htKDhtKHhtKLhtKPhtKThtKXhtKbhtKfhtKjhtKkKK+G0quG0q+G1ouG1o+G1pOG1peG1puG1p+G1qOG1qeG1quG1q+G1rOG1reG1ruG1r+G1sOG1seG1suG1s+G1tOG1teG1tuG1t+G1ueG1uuG1u+G1vOG1veG1vuG1v+G2gOG2geG2guG2g+G2hOG2heG2huG2h+G2iOG2ieG2iuG2i+G2jOG2jeG2juG2j+G2kOG2keG2kuG2k+G2lOG2leG2luG2l+G2mOG2meG2muG4gOG4geG4guG4g+G4hOG4heG4huG4hwor4biI4biJ4biK4biL4biM4biN4biO4biP4biQ4biR4biS4biT4biU4biV4biW4biX4biY4biZ4bia4bib4bic4bid4bie4bif4big4bih4bii4bij4bik4bil4bim4bin4bio4bip4biq4bir4bis4bit4biu4biv4biw4bix4biy4biz4bi04bi14bi24bi34bi44bi54bi64bi74bi84bi94bi+4bi/4bmA4bmB4bmC4bmD4bmE4bmF4bmG4bmH4bmI4bmJCivhuYrhuYvhuYzhuY3huY7huY/huZDhuZHhuZLhuZPhuZThuZXhuZbhuZfhuZjhuZnhuZrhuZvhuZzhuZ3huZ7huZ/huaDhuaHhuaLhuaPhuaThuaXhuabhuafhuajhuanhuarhuavhuazhua3hua7hua/hubDhubHhubLhubPhubThubXhubbhubfhubjhubnhubrhubvhubzhub3hub7hub/huoDhuoHhuoLhuoPhuoThuoXhuobhuofhuojhuonhuorhuosKK+G6jOG6jeG6juG6j+G6kOG6keG6kuG6k+G6lOG6leG6luG6l+G6mOG6meG6muG6m+G6oOG6oeG6ouG6o+G6pOG6peG6puG6p+G6qOG6qeG6quG6q+G6rOG6reG6ruG6r+G6sOG6seG6suG6s+G6tOG6teG6tuG6t+G6uOG6ueG6uuG6u+G6vOG6veG6vuG6v+G7gOG7geG7guG7g+G7hOG7heG7huG7h+G7iOG7ieG7iuG7i+G7jOG7jeG7juG7j+G7kOG7kQor4buS4buT4buU4buV4buW4buX4buY4buZ4bua4bub4buc4bud4bue4buf4bug4buh4bui4buj4buk4bul4bum4bun4buo4bup4buq4bur4bus4but4buu4buv4buw4bux4buy4buz4bu04bu14bu24bu34bu44bu54byA4byB4byC4byD4byE4byF4byG4byH4byI4byJ4byK4byL4byM4byN4byO4byP4byQ4byR4byS4byT4byU4byV4byY4byZ4bya4bybCivhvJzhvJ3hvKDhvKHhvKLhvKPhvKThvKXhvKbhvKfhvKjhvKnhvKrhvKvhvKzhvK3hvK7hvK/hvLDhvLHhvLLhvLPhvLThvLXhvLbhvLfhvLjhvLnhvLrhvLvhvLzhvL3hvL7hvL/hvYDhvYHhvYLhvYPhvYThvYXhvYjhvYnhvYrhvYvhvYzhvY3hvZDhvZHhvZLhvZPhvZThvZXhvZbhvZfhvZnhvZvhvZ3hvZ/hvaDhvaHhvaLhvaPhvaThvaXhvabhvacKK+G9qOG9qeG9quG9q+G9rOG9reG9ruG9r+G9sOG9seG9suG9s+G9tOG9teG9tuG9t+G9uOG9ueG9uuG9u+G9vOG9veG+gOG+geG+guG+g+G+hOG+heG+huG+h+G+kOG+keG+kuG+k+G+lOG+leG+luG+l+G+oOG+oeG+ouG+o+G+pOG+peG+puG+p+G+sOG+seG+suG+s+G+tOG+tuG+t+G+uOG+ueG+uuG+u+G+vuG/guG/g+G/hOG/huG/h+G/iOG/ieG/igor4b+L4b+Q4b+R4b+S4b+T4b+W4b+X4b+Y4b+Z4b+a4b+b4b+g4b+h4b+i4b+j4b+k4b+l4b+m4b+n4b+o4b+p4b+q4b+r4b+s4b+y4b+z4b+04b+24b+34b+44b+54b+64b+74oGx4oG/4oSC4oSH4oSK4oSL4oSM4oSN4oSO4oSP4oSQ4oSR4oSS4oST4oSV4oSZ4oSa4oSb4oSc4oSd4oSk4oSm4oSo4oSq4oSr4oSs4oSt4oSv4oSw4oSx4oSz4oS04oS5CitBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6wqrCtcK6w4DDgcOCw4PDhMOFw4bDh8OIw4nDigorw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O8w73DvsO/xIDEgcSCxIPEhMSFxIbEh8SIxInEisSLxIzEjcSOCivEj8SQxJHEksSTxJTElcSWxJfEmMSZxJrEm8ScxJ3EnsSfxKDEocSixKPEpMSlxKbEp8SoxKnEqsSrxKzErcSuxK/EsMSxxLLEs8S0xLXEtsS3xLjEucS6xLvEvMS9xL7Ev8WAxYHFgsWDxYTFhcWGxYfFiMWJxYrFi8WMxY3FjsWPxZAKK8WRxZLFk8WUxZXFlsWXxZjFmcWaxZvFnMWdxZ7Fn8WgxaHFosWjxaTFpcWmxafFqMWpxarFq8Wsxa3FrsWvxbDFscWyxbPFtMW1xbbFt8W4xbnFusW7xbzFvcW+xb/GgMaBxoLGg8aExoXGhsaHxojGicaKxovGjMaNxo7Gj8aQxpHGkgorxpPGlMaVxpbGl8aYxpnGmsabxpzGncaexp/GoMahxqLGo8akxqXGpsanxqjGqcaqxqvGrMatxq7Gr8awxrHGssazxrTGtca2xrfGuMa5xrrGvMa9xr7Gv8eEx4bHh8eJx4rHjMeNx47Hj8eQx5HHkseTx5THlceWx5fHmMeZx5rHm8ecCivHnceex5/HoMehx6LHo8ekx6XHpsenx6jHqceqx6vHrMetx67Hr8ewx7HHs8e0x7XHtse3x7jHuce6x7vHvMe9x77Hv8iAyIHIgsiDyITIhciGyIfIiMiJyIrIi8iMyI3IjsiPyJDIkciSyJPIlMiVyJbIl8iYyJnImsibyJzIncieyJ8KK8igyKHIosijyKTIpcimyKfIqMipyKrIq8isyK3IrsivyLDIsciyyLPItMi1yLbIt8i4yLnIusi7yLzIvci+yL/JgMmByZDJkcmSyZPJlMmVyZbJl8mYyZnJmsmbyZzJncmeyZ/JoMmhyaLJo8mkyaXJpsmnyajJqcmqyavJrMmtya7JrworybDJscmyybPJtMm1ybbJt8m4ybnJusm7ybzJvcm+yb/KgMqByoLKg8qEyoXKhsqHyojKicqKyovKjMqNyo7Kj8qQypHKksqTypTKlcqWypfKmMqZyprKm8qcyp3KnsqfyqDKocqiyqPKpMqlyqbKp8qoyqnKqsqryqzKrcquyq/Ohs6ICivOic6KzozOjs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz40KK8+Oz5DPkc+Sz5PPlM+Vz5bPl8+Yz5nPms+bz5zPnc+ez5/PoM+hz6LPo8+kz6XPps+nz6jPqc+qz6vPrM+tz67Pr8+wz7HPss+zz7TPtc+3z7jPuc+6z7vPvM+9z77Pv9CA0IHQgtCD0ITQhdCG0IfQiNCJ0IrQi9CM0I3QjtCP0JDQkQor0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9GQ0ZHRktGTCivRlNGV0ZbRl9GY0ZnRmtGb0ZzRndGe0Z/RoNGh0aLRo9Gk0aXRptGn0ajRqdGq0avRrNGt0a7Rr9Gw0bHRstGz0bTRtdG20bfRuNG50brRu9G80b3RvtG/0oDSgdKK0ovSjNKN0o7Sj9KQ0pHSktKT0pTSldKW0pfSmNKZ0prSm9Kc0p0KK9Ke0p/SoNKh0qLSo9Kk0qXSptKn0qjSqdKq0qvSrNKt0q7Sr9Kw0rHSstKz0rTStdK20rfSuNK50rrSu9K80r3SvtK/04DTgdOC04PThNOF04bTh9OI04nTitOL04zTjdOO05DTkdOS05PTlNOV05bTl9OY05nTmtOb05zTndOe05/ToAor06HTotOj06TTpdOm06fTqNOp06rTq9Os063TrtOv07DTsdOy07PTtNO107bTt9O407nUgNSB1ILUg9SE1IXUhtSH1IjUidSK1IvUjNSN1I7Uj9Sx1LLUs9S01LXUttS31LjUudS61LvUvNS91L7Uv9WA1YHVgtWD1YTVhdWG1YfViNWJCivVitWL1YzVjdWO1Y/VkNWR1ZLVk9WU1ZXVltWh1aLVo9Wk1aXVptWn1ajVqdWq1avVrNWt1a7Vr9Ww1bHVstWz1bTVtdW21bfVuNW51brVu9W81b3VvtW/1oDWgdaC1oPWhNaF1obWh+GCoOGCoeGCouGCo+GCpOGCpeGCpuGCp+GCqOGCqeGCquGCq+GCrOGCrQor4YKu4YKv4YKw4YKx4YKy4YKz4YK04YK14YK24YK34YK44YK54YK64YK74YK84YK94YK+4YK/4YOA4YOB4YOC4YOD4YOE4YOF4bSA4bSB4bSC4bSD4bSE4bSF4bSG4bSH4bSI4bSJ4bSK4bSL4bSM4bSN4bSO4bSP4bSQ4bSR4bSS4bST4bSU4bSV4bSW4bSX4bSY4bSZ4bSa4bSb4bSc4bSd4bSe4bSf4bSg4bSh4bSi4bSj4bSk4bSl4bSm4bSn4bSo4bSpCivhtKrhtKvhtaLhtaPhtaThtaXhtabhtafhtajhtanhtarhtavhtazhta3hta7hta/htbDhtbHhtbLhtbPhtbThtbXhtbbhtbfhtbnhtbrhtbvhtbzhtb3htb7htb/htoDhtoHhtoLhtoPhtoThtoXhtobhtofhtojhtonhtorhtovhtozhto3hto7hto/htpDhtpHhtpLhtpPhtpThtpXhtpbhtpfhtpjhtpnhtprhuIDhuIHhuILhuIPhuIThuIXhuIbhuIcKK+G4iOG4ieG4iuG4i+G4jOG4jeG4juG4j+G4kOG4keG4kuG4k+G4lOG4leG4luG4l+G4mOG4meG4muG4m+G4nOG4neG4nuG4n+G4oOG4oeG4ouG4o+G4pOG4peG4puG4p+G4qOG4qeG4quG4q+G4rOG4reG4ruG4r+G4sOG4seG4suG4s+G4tOG4teG4tuG4t+G4uOG4ueG4uuG4u+G4vOG4veG4vuG4v+G5gOG5geG5guG5g+G5hOG5heG5huG5h+G5iOG5iQor4bmK4bmL4bmM4bmN4bmO4bmP4bmQ4bmR4bmS4bmT4bmU4bmV4bmW4bmX4bmY4bmZ4bma4bmb4bmc4bmd4bme4bmf4bmg4bmh4bmi4bmj4bmk4bml4bmm4bmn4bmo4bmp4bmq4bmr4bms4bmt4bmu4bmv4bmw4bmx4bmy4bmz4bm04bm14bm24bm34bm44bm54bm64bm74bm84bm94bm+4bm/4bqA4bqB4bqC4bqD4bqE4bqF4bqG4bqH4bqI4bqJ4bqK4bqLCivhuozhuo3huo7huo/hupDhupHhupLhupPhupThupXhupbhupfhupjhupnhuprhupvhuqDhuqHhuqLhuqPhuqThuqXhuqbhuqfhuqjhuqnhuqrhuqvhuqzhuq3huq7huq/hurDhurHhurLhurPhurThurXhurbhurfhurjhurnhurrhurvhurzhur3hur7hur/hu4Dhu4Hhu4Lhu4Phu4Thu4Xhu4bhu4fhu4jhu4nhu4rhu4vhu4zhu43hu47hu4/hu5Dhu5EKK+G7kuG7k+G7lOG7leG7luG7l+G7mOG7meG7muG7m+G7nOG7neG7nuG7n+G7oOG7oeG7ouG7o+G7pOG7peG7puG7p+G7qOG7qeG7quG7q+G7rOG7reG7ruG7r+G7sOG7seG7suG7s+G7tOG7teG7tuG7t+G7uOG7ueG8gOG8geG8guG8g+G8hOG8heG8huG8h+G8iOG8ieG8iuG8i+G8jOG8jeG8juG8j+G8kOG8keG8kuG8k+G8lOG8leG8mOG8meG8muG8mwor4byc4byd4byg4byh4byi4byj4byk4byl4bym4byn4byo4byp4byq4byr4bys4byt4byu4byv4byw4byx4byy4byz4by04by14by24by34by44by54by64by74by84by94by+4by/4b2A4b2B4b2C4b2D4b2E4b2F4b2I4b2J4b2K4b2L4b2M4b2N4b2Q4b2R4b2S4b2T4b2U4b2V4b2W4b2X4b2Z4b2b4b2d4b2f4b2g4b2h4b2i4b2j4b2k4b2l4b2m4b2nCivhvajhvanhvarhvavhvazhva3hva7hva/hvbDhvbHhvbLhvbPhvbThvbXhvbbhvbfhvbjhvbnhvbrhvbvhvbzhvb3hvoDhvoHhvoLhvoPhvoThvoXhvobhvofhvpDhvpHhvpLhvpPhvpThvpXhvpbhvpfhvqDhvqHhvqLhvqPhvqThvqXhvqbhvqfhvrDhvrHhvrLhvrPhvrThvrbhvrfhvrjhvrnhvrrhvrvhvr7hv4Lhv4Phv4Thv4bhv4fhv4jhv4nhv4oKK+G/i+G/kOG/keG/kuG/k+G/luG/l+G/mOG/meG/muG/m+G/oOG/oeG/ouG/o+G/pOG/peG/puG/p+G/qOG/qeG/quG/q+G/rOG/suG/s+G/tOG/tuG/t+G/uOG/ueG/uuG/u+KBseKBv+KEguKEh+KEiuKEi+KEjOKEjeKEjuKEj+KEkOKEkeKEkuKEk+KEleKEmeKEmuKEm+KEnOKEneKEpOKEpuKEqOKEquKEq+KErOKEreKEr+KEsOKEseKEs+KEtOKEuQorQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esKqwrXCusOAw4HDgsODw4TDhcOGw4fDiMOJw4oKK8OLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7jDucO6w7vDvMO9w77Dv8SAxIHEgsSDxITEhcSGxIfEiMSJxIrEi8SMxI3EjgorxI/EkMSRxJLEk8SUxJXElsSXxJjEmcSaxJvEnMSdxJ7En8SgxKHEosSjxKTEpcSmxKfEqMSpxKrEq8SsxK3ErsSvxLDEscSyxLPEtMS1xLbEt8S4xLnEusS7xLzEvcS+xL/FgMWBxYLFg8WExYXFhsWHxYjFicWKxYvFjMWNxY7Fj8WQCivFkcWSxZPFlMWVxZbFl8WYxZnFmsWbxZzFncWexZ/FoMWhxaLFo8WkxaXFpsWnxajFqcWqxavFrMWtxa7Fr8WwxbHFssWzxbTFtcW2xbfFuMW5xbrFu8W8xb3FvsW/xoDGgcaCxoPGhMaFxobGh8aIxonGisaLxozGjcaOxo/GkMaRxpIKK8aTxpTGlcaWxpfGmMaZxprGm8acxp3GnsafxqDGocaixqPGpMalxqbGp8aoxqnGqsarxqzGrcauxq/GsMaxxrLGs8a0xrXGtsa3xrjGuca6xrzGvca+xr/HhMeGx4fHiceKx4zHjceOx4/HkMeRx5LHk8eUx5XHlseXx5jHmceax5vHnAorx53Hnsefx6DHoceix6PHpMelx6bHp8eox6nHqserx6zHrceux6/HsMexx7PHtMe1x7bHt8e4x7nHuse7x7zHvce+x7/IgMiByILIg8iEyIXIhsiHyIjIiciKyIvIjMiNyI7Ij8iQyJHIksiTyJTIlciWyJfImMiZyJrIm8icyJ3InsifCivIoMihyKLIo8ikyKXIpsinyKjIqciqyKvIrMityK7Ir8iwyLHIssizyLTItci2yLfIuMi5yLrIu8i8yL3Ivsi/yYDJgcmQyZHJksmTyZTJlcmWyZfJmMmZyZrJm8mcyZ3JnsmfyaDJocmiyaPJpMmlyabJp8moyanJqsmryazJrcmuya8KK8mwybHJssmzybTJtcm2ybfJuMm5ybrJu8m8yb3Jvsm/yoDKgcqCyoPKhMqFyobKh8qIyonKisqLyozKjcqOyo/KkMqRypLKk8qUypXKlsqXypjKmcqaypvKnMqdyp7Kn8qgyqHKosqjyqTKpcqmyqfKqMqpyqrKq8qsyq3KrsqvzobOiAorzonOis6Mzo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+NCivPjs+Qz5HPks+Tz5TPlc+Wz5fPmM+Zz5rPm8+cz53Pns+fz6DPoc+iz6PPpM+lz6bPp8+oz6nPqs+rz6zPrc+uz6/PsM+xz7LPs8+0z7XPt8+4z7nPus+7z7zPvc++z7/QgNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjNCN0I7Qj9CQ0JEKK9CS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/RkNGR0ZLRkwor0ZTRldGW0ZfRmNGZ0ZrRm9Gc0Z3RntGf0aDRodGi0aPRpNGl0abRp9Go0anRqtGr0azRrdGu0a/RsNGx0bLRs9G00bXRttG30bjRudG60bvRvNG90b7Rv9KA0oHSitKL0ozSjdKO0o/SkNKR0pLSk9KU0pXSltKX0pjSmdKa0pvSnNKdCivSntKf0qDSodKi0qPSpNKl0qbSp9Ko0qnSqtKr0qzSrdKu0q/SsNKx0rLSs9K00rXSttK30rjSudK60rvSvNK90r7Sv9OA04HTgtOD04TThdOG04fTiNOJ04rTi9OM043TjtOQ05HTktOT05TTldOW05fTmNOZ05rTm9Oc053TntOf06AKK9Oh06LTo9Ok06XTptOn06jTqdOq06vTrNOt067Tr9Ow07HTstOz07TTtdO207fTuNO51IDUgdSC1IPUhNSF1IbUh9SI1InUitSL1IzUjdSO1I/UsdSy1LPUtNS11LbUt9S41LnUutS71LzUvdS+1L/VgNWB1YLVg9WE1YXVhtWH1YjViQor1YrVi9WM1Y3VjtWP1ZDVkdWS1ZPVlNWV1ZbVodWi1aPVpNWl1abVp9Wo1anVqtWr1azVrdWu1a/VsNWx1bLVs9W01bXVttW31bjVudW61bvVvNW91b7Vv9aA1oHWgtaD1oTWhdaG1ofhgqDhgqHhgqLhgqPhgqThgqXhgqbhgqfhgqjhgqnhgqrhgqvhgqzhgq0KK+GCruGCr+GCsOGCseGCsuGCs+GCtOGCteGCtuGCt+GCuOGCueGCuuGCu+GCvOGCveGCvuGCv+GDgOGDgeGDguGDg+GDhOGDheG0gOG0geG0guG0g+G0hOG0heG0huG0h+G0iOG0ieG0iuG0i+G0jOG0jeG0juG0j+G0kOG0keG0kuG0k+G0lOG0leG0luG0l+G0mOG0meG0muG0m+G0nOG0neG0nuG0n+G0oOG0oeG0ouG0o+G0pOG0peG0puG0p+G0qOG0qQor4bSq4bSr4bWi4bWj4bWk4bWl4bWm4bWn4bWo4bWp4bWq4bWr4bWs4bWt4bWu4bWv4bWw4bWx4bWy4bWz4bW04bW14bW24bW34bW54bW64bW74bW84bW94bW+4bW/4baA4baB4baC4baD4baE4baF4baG4baH4baI4baJ4baK4baL4baM4baN4baO4baP4baQ4baR4baS4baT4baU4baV4baW4baX4baY4baZ4baa4biA4biB4biC4biD4biE4biF4biG4biHCivhuIjhuInhuIrhuIvhuIzhuI3huI7huI/huJDhuJHhuJLhuJPhuJThuJXhuJbhuJfhuJjhuJnhuJrhuJvhuJzhuJ3huJ7huJ/huKDhuKHhuKLhuKPhuKThuKXhuKbhuKfhuKjhuKnhuKrhuKvhuKzhuK3huK7huK/huLDhuLHhuLLhuLPhuLThuLXhuLbhuLfhuLjhuLnhuLrhuLvhuLzhuL3huL7huL/huYDhuYHhuYLhuYPhuYThuYXhuYbhuYfhuYjhuYkKK+G5iuG5i+G5jOG5jeG5juG5j+G5kOG5keG5kuG5k+G5lOG5leG5luG5l+G5mOG5meG5muG5m+G5nOG5neG5nuG5n+G5oOG5oeG5ouG5o+G5pOG5peG5puG5p+G5qOG5qeG5quG5q+G5rOG5reG5ruG5r+G5sOG5seG5suG5s+G5tOG5teG5tuG5t+G5uOG5ueG5uuG5u+G5vOG5veG5vuG5v+G6gOG6geG6guG6g+G6hOG6heG6huG6h+G6iOG6ieG6iuG6iwor4bqM4bqN4bqO4bqP4bqQ4bqR4bqS4bqT4bqU4bqV4bqW4bqX4bqY4bqZ4bqa4bqb4bqg4bqh4bqi4bqj4bqk4bql4bqm4bqn4bqo4bqp4bqq4bqr4bqs4bqt4bqu4bqv4bqw4bqx4bqy4bqz4bq04bq14bq24bq34bq44bq54bq64bq74bq84bq94bq+4bq/4buA4buB4buC4buD4buE4buF4buG4buH4buI4buJ4buK4buL4buM4buN4buO4buP4buQ4buRCivhu5Lhu5Phu5Thu5Xhu5bhu5fhu5jhu5nhu5rhu5vhu5zhu53hu57hu5/hu6Dhu6Hhu6Lhu6Phu6Thu6Xhu6bhu6fhu6jhu6nhu6rhu6vhu6zhu63hu67hu6/hu7Dhu7Hhu7Lhu7Phu7Thu7Xhu7bhu7fhu7jhu7nhvIDhvIHhvILhvIPhvIThvIXhvIbhvIfhvIjhvInhvIrhvIvhvIzhvI3hvI7hvI/hvJDhvJHhvJLhvJPhvJThvJXhvJjhvJnhvJrhvJsKK+G8nOG8neG8oOG8oeG8ouG8o+G8pOG8peG8puG8p+G8qOG8qeG8quG8q+G8rOG8reG8ruG8r+G8sOG8seG8suG8s+G8tOG8teG8tuG8t+G8uOG8ueG8uuG8u+G8vOG8veG8vuG8v+G9gOG9geG9guG9g+G9hOG9heG9iOG9ieG9iuG9i+G9jOG9jeG9kOG9keG9kuG9k+G9lOG9leG9luG9l+G9meG9m+G9neG9n+G9oOG9oeG9ouG9o+G9pOG9peG9puG9pwor4b2o4b2p4b2q4b2r4b2s4b2t4b2u4b2v4b2w4b2x4b2y4b2z4b204b214b224b234b244b254b264b274b284b294b6A4b6B4b6C4b6D4b6E4b6F4b6G4b6H4b6Q4b6R4b6S4b6T4b6U4b6V4b6W4b6X4b6g4b6h4b6i4b6j4b6k4b6l4b6m4b6n4b6w4b6x4b6y4b6z4b604b624b634b644b654b664b674b6+4b+C4b+D4b+E4b+G4b+H4b+I4b+J4b+KCivhv4vhv5Dhv5Hhv5Lhv5Phv5bhv5fhv5jhv5nhv5rhv5vhv6Dhv6Hhv6Lhv6Phv6Thv6Xhv6bhv6fhv6jhv6nhv6rhv6vhv6zhv7Lhv7Phv7Thv7bhv7fhv7jhv7nhv7rhv7vigbHigb/ihILihIfihIrihIvihIzihI3ihI7ihI/ihJDihJHihJLihJPihJXihJnihJrihJvihJzihJ3ihKTihKbihKjihKrihKvihKzihK3ihK/ihLDihLHihLPihLTihLkKK0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXrCqsK1wrrDgMOBw4LDg8OEw4XDhsOHw4jDicOKCivDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO4w7nDusO7w7zDvcO+w7/EgMSBxILEg8SExIXEhsSHxIjEicSKxIvEjMSNxI4KK8SPxJDEkcSSxJPElMSVxJbEl8SYxJnEmsSbxJzEncSexJ/EoMShxKLEo8SkxKXEpsSnxKjEqcSqxKvErMStxK7Er8SwxLHEssSzxLTEtcS2xLfEuMS5xLrEu8S8xL3EvsS/xYDFgcWCxYPFhMWFxYbFh8WIxYnFisWLxYzFjcWOxY/FkAorxZHFksWTxZTFlcWWxZfFmMWZxZrFm8WcxZ3FnsWfxaDFocWixaPFpMWlxabFp8WoxanFqsWrxazFrcWuxa/FsMWxxbLFs8W0xbXFtsW3xbjFucW6xbvFvMW9xb7Fv8aAxoHGgsaDxoTGhcaGxofGiMaJxorGi8aMxo3GjsaPxpDGkcaSCivGk8aUxpXGlsaXxpjGmcaaxpvGnMadxp7Gn8agxqHGosajxqTGpcamxqfGqMapxqrGq8asxq3GrsavxrDGscayxrPGtMa1xrbGt8a4xrnGusa8xr3Gvsa/x4THhseHx4nHiseMx43HjsePx5DHkceSx5PHlMeVx5bHl8eYx5nHmsebx5wKK8edx57Hn8egx6HHosejx6THpcemx6fHqMepx6rHq8esx63Hrsevx7DHscezx7THtce2x7fHuMe5x7rHu8e8x73Hvse/yIDIgciCyIPIhMiFyIbIh8iIyInIisiLyIzIjciOyI/IkMiRyJLIk8iUyJXIlsiXyJjImciayJvInMidyJ7InworyKDIociiyKPIpMilyKbIp8ioyKnIqsiryKzIrciuyK/IsMixyLLIs8i0yLXItsi3yLjIuci6yLvIvMi9yL7Iv8mAyYHJkMmRyZLJk8mUyZXJlsmXyZjJmcmayZvJnMmdyZ7Jn8mgyaHJosmjyaTJpcmmyafJqMmpyarJq8msya3JrsmvCivJsMmxybLJs8m0ybXJtsm3ybjJucm6ybvJvMm9yb7Jv8qAyoHKgsqDyoTKhcqGyofKiMqJyorKi8qMyo3KjsqPypDKkcqSypPKlMqVypbKl8qYypnKmsqbypzKncqeyp/KoMqhyqLKo8qkyqXKpsqnyqjKqcqqyqvKrMqtyq7Kr86GzogKK86JzorOjM6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjQorz47PkM+Rz5LPk8+Uz5XPls+Xz5jPmc+az5vPnM+dz57Pn8+gz6HPos+jz6TPpc+mz6fPqM+pz6rPq8+sz63Prs+vz7DPsc+yz7PPtM+1z7fPuM+5z7rPu8+8z73Pvs+/0IDQgdCC0IPQhNCF0IbQh9CI0InQitCL0IzQjdCO0I/QkNCRCivQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0ZDRkdGS0ZMKK9GU0ZXRltGX0ZjRmdGa0ZvRnNGd0Z7Rn9Gg0aHRotGj0aTRpdGm0afRqNGp0arRq9Gs0a3RrtGv0bDRsdGy0bPRtNG10bbRt9G40bnRutG70bzRvdG+0b/SgNKB0orSi9KM0o3SjtKP0pDSkdKS0pPSlNKV0pbSl9KY0pnSmtKb0pzSnQor0p7Sn9Kg0qHSotKj0qTSpdKm0qfSqNKp0qrSq9Ks0q3SrtKv0rDSsdKy0rPStNK10rbSt9K40rnSutK70rzSvdK+0r/TgNOB04LTg9OE04XThtOH04jTidOK04vTjNON047TkNOR05LTk9OU05XTltOX05jTmdOa05vTnNOd057Tn9OgCivTodOi06PTpNOl06bTp9Oo06nTqtOr06zTrdOu06/TsNOx07LTs9O007XTttO307jTudSA1IHUgtSD1ITUhdSG1IfUiNSJ1IrUi9SM1I3UjtSP1LHUstSz1LTUtdS21LfUuNS51LrUu9S81L3UvtS/1YDVgdWC1YPVhNWF1YbVh9WI1YkKK9WK1YvVjNWN1Y7Vj9WQ1ZHVktWT1ZTVldWW1aHVotWj1aTVpdWm1afVqNWp1arVq9Ws1a3VrtWv1bDVsdWy1bPVtNW11bbVt9W41bnVutW71bzVvdW+1b/WgNaB1oLWg9aE1oXWhtaH4YKg4YKh4YKi4YKj4YKk4YKl4YKm4YKn4YKo4YKp4YKq4YKr4YKs4YKtCivhgq7hgq/hgrDhgrHhgrLhgrPhgrThgrXhgrbhgrfhgrjhgrnhgrrhgrvhgrzhgr3hgr7hgr/hg4Dhg4Hhg4Lhg4Phg4Thg4XhtIDhtIHhtILhtIPhtIThtIXhtIbhtIfhtIjhtInhtIrhtIvhtIzhtI3htI7htI/htJDhtJHhtJLhtJPhtJThtJXhtJbhtJfhtJjhtJnhtJrhtJvhtJzhtJ3htJ7htJ/htKDhtKHhtKLhtKPhtKThtKXhtKbhtKfhtKjhtKkKK+G0quG0q+G1ouG1o+G1pOG1peG1puG1p+G1qOG1qeG1quG1q+G1rOG1reG1ruG1r+G1sOG1seG1suG1s+G1tOG1teG1tuG1t+G1ueG1uuG1u+G1vOG1veG1vuG1v+G2gOG2geG2guG2g+G2hOG2heG2huG2h+G2iOG2ieG2iuG2i+G2jOG2jeG2juG2j+G2kOG2keG2kuG2k+G2lOG2leG2luG2l+G2mOG2meG2muG4gOG4geG4guG4g+G4hOG4heG4huG4hwor4biI4biJ4biK4biL4biM4biN4biO4biP4biQ4biR4biS4biT4biU4biV4biW4biX4biY4biZ4bia4bib4bic4bid4bie4bif4big4bih4bii4bij4bik4bil4bim4bin4bio4bip4biq4bir4bis4bit4biu4biv4biw4bix4biy4biz4bi04bi14bi24bi34bi44bi54bi64bi74bi84bi94bi+4bi/4bmA4bmB4bmC4bmD4bmE4bmF4bmG4bmH4bmI4bmJCivhuYrhuYvhuYzhuY3huY7huY/huZDhuZHhuZLhuZPhuZThuZXhuZbhuZfhuZjhuZnhuZrhuZvhuZzhuZ3huZ7huZ/huaDhuaHhuaLhuaPhuaThuaXhuabhuafhuajhuanhuarhuavhuazhua3hua7hua/hubDhubHhubLhubPhubThubXhubbhubfhubjhubnhubrhubvhubzhub3hub7hub/huoDhuoHhuoLhuoPhuoThuoXhuobhuofhuojhuonhuorhuosKK+G6jOG6jeG6juG6j+G6kOG6keG6kuG6k+G6lOG6leG6luG6l+G6mOG6meG6muG6m+G6oOG6oeG6ouG6o+G6pOG6peG6puG6p+G6qOG6qeG6quG6q+G6rOG6reG6ruG6r+G6sOG6seG6suG6s+G6tOG6teG6tuG6t+G6uOG6ueG6uuG6u+G6vOG6veG6vuG6v+G7gOG7geG7guG7g+G7hOG7heG7huG7h+G7iOG7ieG7iuG7i+G7jOG7jeG7juG7j+G7kOG7kQor4buS4buT4buU4buV4buW4buX4buY4buZ4bua4bub4buc4bud4bue4buf4bug4buh4bui4buj4buk4bul4bum4bun4buo4bup4buq4bur4bus4but4buu4buv4buw4bux4buy4buz4bu04bu14bu24bu34bu44bu54byA4byB4byC4byD4byE4byF4byG4byH4byI4byJ4byK4byL4byM4byN4byO4byP4byQ4byR4byS4byT4byU4byV4byY4byZ4bya4bybCivhvJzhvJ3hvKDhvKHhvKLhvKPhvKThvKXhvKbhvKfhvKjhvKnhvKrhvKvhvKzhvK3hvK7hvK/hvLDhvLHhvLLhvLPhvLThvLXhvLbhvLfhvLjhvLnhvLrhvLvhvLzhvL3hvL7hvL/hvYDhvYHhvYLhvYPhvYThvYXhvYjhvYnhvYrhvYvhvYzhvY3hvZDhvZHhvZLhvZPhvZThvZXhvZbhvZfhvZnhvZvhvZ3hvZ/hvaDhvaHhvaLhvaPhvaThvaXhvabhvacKK+G9qOG9qeG9quG9q+G9rOG9reG9ruG9r+G9sOG9seG9suG9s+G9tOG9teG9tuG9t+G9uOG9ueG9uuG9u+G9vOG9veG+gOG+geG+guG+g+G+hOG+heG+huG+h+G+kOG+keG+kuG+k+G+lOG+leG+luG+l+G+oOG+oeG+ouG+o+G+pOG+peG+puG+p+G+sOG+seG+suG+s+G+tOG+tuG+t+G+uOG+ueG+uuG+u+G+vuG/guG/g+G/hOG/huG/h+G/iOG/ieG/igor4b+L4b+Q4b+R4b+S4b+T4b+W4b+X4b+Y4b+Z4b+a4b+b4b+g4b+h4b+i4b+j4b+k4b+l4b+m4b+n4b+o4b+p4b+q4b+r4b+s4b+y4b+z4b+04b+24b+34b+44b+54b+64b+74oGx4oG/4oSC4oSH4oSK4oSL4oSM4oSN4oSO4oSP4oSQ4oSR4oSS4oST4oSV4oSZ4oSa4oSb4oSc4oSd4oSk4oSm4oSo4oSq4oSr4oSs4oSt4oSv4oSw4oSx4oSz4oS04oS5CitBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6wqrCtcK6w4DDgcOCw4PDhMOFw4bDh8OIw4nDigorw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O8w73DvsO/xIDEgcSCxIPEhMSFxIbEh8SIxInEisSLxIzEjcSOCivEj8SQxJHEksSTxJTElcSWxJfEmMSZxJrEm8ScxJ3EnsSfxKDEocSixKPEpMSlxKbEp8SoxKnEqsSrxKzErcSuxK/EsMSxxLLEs8S0xLXEtsS3xLjEucS6xLvEvMS9xL7Ev8WAxYHFgsWDxYTFhcWGxYfFiMWJxYrFi8WMxY3FjsWPxZAKK8WRxZLFk8WUxZXFlsWXxZjFmcWaxZvFnMWdxZ7Fn8WgxaHFosWjxaTFpcWmxafFqMWpxarFq8Wsxa3FrsWvxbDFscWyxbPFtMW1xbbFt8W4xbnFusW7xbzFvcW+xb/GgMaBxoLGg8aExoXGhsaHxojGicaKxovGjMaNxo7Gj8aQxpHGkgorxpPGlMaVxpbGl8aYxpnGmsabxpzGncaexp/GoMahxqLGo8akxqXGpsanxqjGqcaqxqvGrMatxq7Gr8awxrHGssazxrTGtca2xrfGuMa5xrrGvMa9xr7Gv8eEx4bHh8eJx4rHjMeNx47Hj8eQx5HHkseTx5THlceWx5fHmMeZx5rHm8ecCivHnceex5/HoMehx6LHo8ekx6XHpsenx6jHqceqx6vHrMetx67Hr8ewx7HHs8e0x7XHtse3x7jHuce6x7vHvMe9x77Hv8iAyIHIgsiDyITIhciGyIfIiMiJyIrIi8iMyI3IjsiPyJDIkciSyJPIlMiVyJbIl8iYyJnImsibyJzIncieyJ8KK8igyKHIosijyKTIpcimyKfIqMipyKrIq8isyK3IrsivyLDIsciyyLPItMi1yLbIt8i4yLnIusi7yLzIvci+yL/JgMmByZDJkcmSyZPJlMmVyZbJl8mYyZnJmsmbyZzJncmeyZ/JoMmhyaLJo8mkyaXJpsmnyajJqcmqyavJrMmtya7JrworybDJscmyybPJtMm1ybbJt8m4ybnJusm7ybzJvcm+yb/KgMqByoLKg8qEyoXKhsqHyojKicqKyovKjMqNyo7Kj8qQypHKksqTypTKlcqWypfKmMqZyprKm8qcyp3KnsqfyqDKocqiyqPKpMqlyqbKp8qoyqnKqsqryqzKrcquyq/Ohs6ICivOic6KzozOjs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz40KK8+Oz5DPkc+Sz5PPlM+Vz5bPl8+Yz5nPms+bz5zPnc+ez5/PoM+hz6LPo8+kz6XPps+nz6jPqc+qz6vPrM+tz67Pr8+wz7HPss+zz7TPtc+3z7jPuc+6z7vPvM+9z77Pv9CA0IHQgtCD0ITQhdCG0IfQiNCJ0IrQi9CM0I3QjtCP0JDQkQor0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9GQ0ZHRktGTCivRlNGV0ZbRl9GY0ZnRmtGb0ZzRndGe0Z/RoNGh0aLRo9Gk0aXRptGn0ajRqdGq0avRrNGt0a7Rr9Gw0bHRstGz0bTRtdG20bfRuNG50brRu9G80b3RvtG/0oDSgdKK0ovSjNKN0o7Sj9KQ0pHSktKT0pTSldKW0pfSmNKZ0prSm9Kc0p0KK9Ke0p/SoNKh0qLSo9Kk0qXSptKn0qjSqdKq0qvSrNKt0q7Sr9Kw0rHSstKz0rTStdK20rfSuNK50rrSu9K80r3SvtK/04DTgdOC04PThNOF04bTh9OI04nTitOL04zTjdOO05DTkdOS05PTlNOV05bTl9OY05nTmtOb05zTndOe05/ToAor06HTotOj06TTpdOm06fTqNOp06rTq9Os063TrtOv07DTsdOy07PTtNO107bTt9O407nUgNSB1ILUg9SE1IXUhtSH1IjUidSK1IvUjNSN1I7Uj9Sx1LLUs9S01LXUttS31LjUudS61LvUvNS91L7Uv9WA1YHVgtWD1YTVhdWG1YfViNWJCivVitWL1YzVjdWO1Y/VkNWR1ZLVk9WU1ZXVltWh1aLVo9Wk1aXVptWn1ajVqdWq1avVrNWt1a7Vr9Ww1bHVstWz1bTVtdW21bfVuNW51brVu9W81b3VvtW/1oDWgdaC1oPWhNaF1obWh+GCoOGCoeGCouGCo+GCpOGCpeGCpuGCp+GCqOGCqeGCquGCq+GCrOGCrQor4YKu4YKv4YKw4YKx4YKy4YKz4YK04YK14YK24YK34YK44YK54YK64YK74YK84YK94YK+4YK/4YOA4YOB4YOC4YOD4YOE4YOF4bSA4bSB4bSC4bSD4bSE4bSF4bSG4bSH4bSI4bSJ4bSK4bSL4bSM4bSN4bSO4bSP4bSQ4bSR4bSS4bST4bSU4bSV4bSW4bSX4bSY4bSZ4bSa4bSb4bSc4bSd4bSe4bSf4bSg4bSh4bSi4bSj4bSk4bSl4bSm4bSn4bSo4bSpCivhtKrhtKvhtaLhtaPhtaThtaXhtabhtafhtajhtanhtarhtavhtazhta3hta7hta/htbDhtbHhtbLhtbPhtbThtbXhtbbhtbfhtbnhtbrhtbvhtbzhtb3htb7htb/htoDhtoHhtoLhtoPhtoThtoXhtobhtofhtojhtonhtorhtovhtozhto3hto7hto/htpDhtpHhtpLhtpPhtpThtpXhtpbhtpfhtpjhtpnhtprhuIDhuIHhuILhuIPhuIThuIXhuIbhuIcKK+G4iOG4ieG4iuG4i+G4jOG4jeG4juG4j+G4kOG4keG4kuG4k+G4lOG4leG4luG4l+G4mOG4meG4muG4m+G4nOG4neG4nuG4n+G4oOG4oeG4ouG4o+G4pOG4peG4puG4p+G4qOG4qeG4quG4q+G4rOG4reG4ruG4r+G4sOG4seG4suG4s+G4tOG4teG4tuG4t+G4uOG4ueG4uuG4u+G4vOG4veG4vuG4v+G5gOG5geG5guG5g+G5hOG5heG5huG5h+G5iOG5iQor4bmK4bmL4bmM4bmN4bmO4bmP4bmQ4bmR4bmS4bmT4bmU4bmV4bmW4bmX4bmY4bmZ4bma4bmb4bmc4bmd4bme4bmf4bmg4bmh4bmi4bmj4bmk4bml4bmm4bmn4bmo4bmp4bmq4bmr4bms4bmt4bmu4bmv4bmw4bmx4bmy4bmz4bm04bm14bm24bm34bm44bm54bm64bm74bm84bm94bm+4bm/4bqA4bqB4bqC4bqD4bqE4bqF4bqG4bqH4bqI4bqJ4bqK4bqLCivhuozhuo3huo7huo/hupDhupHhupLhupPhupThupXhupbhupfhupjhupnhuprhupvhuqDhuqHhuqLhuqPhuqThuqXhuqbhuqfhuqjhuqnhuqrhuqvhuqzhuq3huq7huq/hurDhurHhurLhurPhurThurXhurbhurfhurjhurnhurrhurvhurzhur3hur7hur/hu4Dhu4Hhu4Lhu4Phu4Thu4Xhu4bhu4fhu4jhu4nhu4rhu4vhu4zhu43hu47hu4/hu5Dhu5EKK+G7kuG7k+G7lOG7leG7luG7l+G7mOG7meG7muG7m+G7nOG7neG7nuG7n+G7oOG7oeG7ouG7o+G7pOG7peG7puG7p+G7qOG7qeG7quG7q+G7rOG7reG7ruG7r+G7sOG7seG7suG7s+G7tOG7teG7tuG7t+G7uOG7ueG8gOG8geG8guG8g+G8hOG8heG8huG8h+G8iOG8ieG8iuG8i+G8jOG8jeG8juG8j+G8kOG8keG8kuG8k+G8lOG8leG8mOG8meG8muG8mwor4byc4byd4byg4byh4byi4byj4byk4byl4bym4byn4byo4byp4byq4byr4bys4byt4byu4byv4byw4byx4byy4byz4by04by14by24by34by44by54by64by74by84by94by+4by/4b2A4b2B4b2C4b2D4b2E4b2F4b2I4b2J4b2K4b2L4b2M4b2N4b2Q4b2R4b2S4b2T4b2U4b2V4b2W4b2X4b2Z4b2b4b2d4b2f4b2g4b2h4b2i4b2j4b2k4b2l4b2m4b2nCivhvajhvanhvarhvavhvazhva3hva7hva/hvbDhvbHhvbLhvbPhvbThvbXhvbbhvbfhvbjhvbnhvbrhvbvhvbzhvb3hvoDhvoHhvoLhvoPhvoThvoXhvobhvofhvpDhvpHhvpLhvpPhvpThvpXhvpbhvpfhvqDhvqHhvqLhvqPhvqThvqXhvqbhvqfhvrDhvrHhvrLhvrPhvrThvrbhvrfhvrjhvrnhvrrhvrvhvr7hv4Lhv4Phv4Thv4bhv4fhv4jhv4nhv4oKK+G/i+G/kOG/keG/kuG/k+G/luG/l+G/mOG/meG/muG/m+G/oOG/oeG/ouG/o+G/pOG/peG/puG/p+G/qOG/qeG/quG/q+G/rOG/suG/s+G/tOG/tuG/t+G/uOG/ueG/uuG/u+KBseKBv+KEguKEh+KEiuKEi+KEjOKEjeKEjuKEj+KEkOKEkeKEkuKEk+KEleKEmeKEmuKEm+KEnOKEneKEpOKEpuKEqOKEquKEq+KErOKEreKEr+KEsOKEseKEs+KEtOKEuQorQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esKqwrXCusOAw4HDgsODw4TDhcOGw4fDiMOJw4oKK8OLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7jDucO6w7vDvMO9w77Dv8SAxIHEgsSDxITEhcSGxIfEiMSJxIrEi8SMxI3EjgorxI/EkMSRxJLEk8SUxJXElsSXxJjEmcSaxJvEnMSdxJ7En8SgxKHEosSjxKTEpcSmxKfEqMSpxKrEq8SsxK3ErsSvxLDEscSyxLPEtMS1xLbEt8S4xLnEusS7xLzEvcS+xL/FgMWBxYLFg8WExYXFhsWHxYjFicWKxYvFjMWNxY7Fj8WQCivFkcWSxZPFlMWVxZbFl8WYxZnFmsWbxZzFncWexZ/FoMWhxaLFo8WkxaXFpsWnxajFqcWqxavFrMWtxa7Fr8WwxbHFssWzxbTFtcW2xbfFuMW5xbrFu8W8xb3FvsW/xoDGgcaCxoPGhMaFxobGh8aIxonGisaLxozGjcaOxo/GkMaRxpIKK8aTxpTGlcaWxpfGmMaZxprGm8acxp3GnsafxqDGocaixqPGpMalxqbGp8aoxqnGqsarxqzGrcauxq/GsMaxxrLGs8a0xrXGtsa3xrjGuca6xrzGvca+xr/HhMeGx4fHiceKx4zHjceOx4/HkMeRx5LHk8eUx5XHlseXx5jHmceax5vHnAorx53Hnsefx6DHoceix6PHpMelx6bHp8eox6nHqserx6zHrceux6/HsMexx7PHtMe1x7bHt8e4x7nHuse7x7zHvce+x7/IgMiByILIg8iEyIXIhsiHyIjIiciKyIvIjMiNyI7Ij8iQyJHIksiTyJTIlciWyJfImMiZyJrIm8icyJ3InsifCivIoMihyKLIo8ikyKXIpsinyKjIqciqyKvIrMityK7Ir8iwyLHIssizyLTItci2yLfIuMi5yLrIu8i8yL3Ivsi/yYDJgcmQyZHJksmTyZTJlcmWyZfJmMmZyZrJm8mcyZ3JnsmfyaDJocmiyaPJpMmlyabJp8moyanJqsmryazJrcmuya8KK8mwybHJssmzybTJtcm2ybfJuMm5ybrJu8m8yb3Jvsm/yoDKgcqCyoPKhMqFyobKh8qIyonKisqLyozKjcqOyo/KkMqRypLKk8qUypXKlsqXypjKmcqaypvKnMqdyp7Kn8qgyqHKosqjyqTKpcqmyqfKqMqpyqrKq8qsyq3KrsqvzobOiAorzonOis6Mzo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+NCivPjs+Qz5HPks+Tz5TPlc+Wz5fPmM+Zz5rPm8+cz53Pns+fz6DPoc+iz6PPpM+lz6bPp8+oz6nPqs+rz6zPrc+uz6/PsM+xz7LPs8+0z7XPt8+4z7nPus+7z7zPvc++z7/QgNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjNCN0I7Qj9CQ0JEKK9CS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/RkNGR0ZLRkwor0ZTRldGW0ZfRmNGZ0ZrRm9Gc0Z3RntGf0aDRodGi0aPRpNGl0abRp9Go0anRqtGr0azRrdGu0a/RsNGx0bLRs9G00bXRttG30bjRudG60bvRvNG90b7Rv9KA0oHSitKL0ozSjdKO0o/SkNKR0pLSk9KU0pXSltKX0pjSmdKa0pvSnNKdCivSntKf0qDSodKi0qPSpNKl0qbSp9Ko0qnSqtKr0qzSrdKu0q/SsNKx0rLSs9K00rXSttK30rjSudK60rvSvNK90r7Sv9OA04HTgtOD04TThdOG04fTiNOJ04rTi9OM043TjtOQ05HTktOT05TTldOW05fTmNOZ05rTm9Oc053TntOf06AKK9Oh06LTo9Ok06XTptOn06jTqdOq06vTrNOt067Tr9Ow07HTstOz07TTtdO207fTuNO51IDUgdSC1IPUhNSF1IbUh9SI1InUitSL1IzUjdSO1I/UsdSy1LPUtNS11LbUt9S41LnUutS71LzUvdS+1L/VgNWB1YLVg9WE1YXVhtWH1YjViQor1YrVi9WM1Y3VjtWP1ZDVkdWS1ZPVlNWV1ZbVodWi1aPVpNWl1abVp9Wo1anVqtWr1azVrdWu1a/VsNWx1bLVs9W01bXVttW31bjVudW61bvVvNW91b7Vv9aA1oHWgtaD1oTWhdaG1ofhgqDhgqHhgqLhgqPhgqThgqXhgqbhgqfhgqjhgqnhgqrhgqvhgqzhgq0KK+GCruGCr+GCsOGCseGCsuGCs+GCtOGCteGCtuGCt+GCuOGCueGCuuGCu+GCvOGCveGCvuGCv+GDgOGDgeGDguGDg+GDhOGDheG0gOG0geG0guG0g+G0hOG0heG0huG0h+G0iOG0ieG0iuG0i+G0jOG0jeG0juG0j+G0kOG0keG0kuG0k+G0lOG0leG0luG0l+G0mOG0meG0muG0m+G0nOG0neG0nuG0n+G0oOG0oeG0ouG0o+G0pOG0peG0puG0p+G0qOG0qQor4bSq4bSr4bWi4bWj4bWk4bWl4bWm4bWn4bWo4bWp4bWq4bWr4bWs4bWt4bWu4bWv4bWw4bWx4bWy4bWz4bW04bW14bW24bW34bW54bW64bW74bW84bW94bW+4bW/4baA4baB4baC4baD4baE4baF4baG4baH4baI4baJ4baK4baL4baM4baN4baO4baP4baQ4baR4baS4baT4baU4baV4baW4baX4baY4baZ4baa4biA4biB4biC4biD4biE4biF4biG4biHCivhuIjhuInhuIrhuIvhuIzhuI3huI7huI/huJDhuJHhuJLhuJPhuJThuJXhuJbhuJfhuJjhuJnhuJrhuJvhuJzhuJ3huJ7huJ/huKDhuKHhuKLhuKPhuKThuKXhuKbhuKfhuKjhuKnhuKrhuKvhuKzhuK3huK7huK/huLDhuLHhuLLhuLPhuLThuLXhuLbhuLfhuLjhuLnhuLrhuLvhuLzhuL3huL7huL/huYDhuYHhuYLhuYPhuYThuYXhuYbhuYfhuYjhuYkKK+G5iuG5i+G5jOG5jeG5juG5j+G5kOG5keG5kuG5k+G5lOG5leG5luG5l+G5mOG5meG5muG5m+G5nOG5neG5nuG5n+G5oOG5oeG5ouG5o+G5pOG5peG5puG5p+G5qOG5qeG5quG5q+G5rOG5reG5ruG5r+G5sOG5seG5suG5s+G5tOG5teG5tuG5t+G5uOG5ueG5uuG5u+G5vOG5veG5vuG5v+G6gOG6geG6guG6g+G6hOG6heG6huG6h+G6iOG6ieG6iuG6iwor4bqM4bqN4bqO4bqP4bqQ4bqR4bqS4bqT4bqU4bqV4bqW4bqX4bqY4bqZ4bqa4bqb4bqg4bqh4bqi4bqj4bqk4bql4bqm4bqn4bqo4bqp4bqq4bqr4bqs4bqt4bqu4bqv4bqw4bqx4bqy4bqz4bq04bq14bq24bq34bq44bq54bq64bq74bq84bq94bq+4bq/4buA4buB4buC4buD4buE4buF4buG4buH4buI4buJ4buK4buL4buM4buN4buO4buP4buQ4buRCivhu5Lhu5Phu5Thu5Xhu5bhu5fhu5jhu5nhu5rhu5vhu5zhu53hu57hu5/hu6Dhu6Hhu6Lhu6Phu6Thu6Xhu6bhu6fhu6jhu6nhu6rhu6vhu6zhu63hu67hu6/hu7Dhu7Hhu7Lhu7Phu7Thu7Xhu7bhu7fhu7jhu7nhvIDhvIHhvILhvIPhvIThvIXhvIbhvIfhvIjhvInhvIrhvIvhvIzhvI3hvI7hvI/hvJDhvJHhvJLhvJPhvJThvJXhvJjhvJnhvJrhvJsKK+G8nOG8neG8oOG8oeG8ouG8o+G8pOG8peG8puG8p+G8qOG8qeG8quG8q+G8rOG8reG8ruG8r+G8sOG8seG8suG8s+G8tOG8teG8tuG8t+G8uOG8ueG8uuG8u+G8vOG8veG8vuG8v+G9gOG9geG9guG9g+G9hOG9heG9iOG9ieG9iuG9i+G9jOG9jeG9kOG9keG9kuG9k+G9lOG9leG9luG9l+G9meG9m+G9neG9n+G9oOG9oeG9ouG9o+G9pOG9peG9puG9pwor4b2o4b2p4b2q4b2r4b2s4b2t4b2u4b2v4b2w4b2x4b2y4b2z4b204b214b224b234b244b254b264b274b284b294b6A4b6B4b6C4b6D4b6E4b6F4b6G4b6H4b6Q4b6R4b6S4b6T4b6U4b6V4b6W4b6X4b6g4b6h4b6i4b6j4b6k4b6l4b6m4b6n4b6w4b6x4b6y4b6z4b604b624b634b644b654b664b674b6+4b+C4b+D4b+E4b+G4b+H4b+I4b+J4b+KCivhv4vhv5Dhv5Hhv5Lhv5Phv5bhv5fhv5jhv5nhv5rhv5vhv6Dhv6Hhv6Lhv6Phv6Thv6Xhv6bhv6fhv6jhv6nhv6rhv6vhv6zhv7Lhv7Phv7Thv7bhv7fhv7jhv7nhv7rhv7vigbHigb/ihILihIfihIrihIvihIzihI3ihI7ihI/ihJDihJHihJLihJPihJXihJnihJrihJvihJzihJ3ihKTihKbihKjihKrihKvihKzihK3ihK/ihLDihLHihLPihLTihLkKK0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXrCqsK1wrrDgMOBw4LDg8OEw4XDhsOHw4jDicOKCivDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO4w7nDusO7w7zDvcO+w7/EgMSBxILEg8SExIXEhsSHxIjEicSKxIvEjMSNxI4KK8SPxJDEkcSSxJPElMSVxJbEl8SYxJnEmsSbxJzEncSexJ/EoMShxKLEo8SkxKXEpsSnxKjEqcSqxKvErMStxK7Er8SwxLHEssSzxLTEtcS2xLfEuMS5xLrEu8S8xL3EvsS/xYDFgcWCxYPFhMWFxYbFh8WIxYnFisWLxYzFjcWOxY/FkAorxZHFksWTxZTFlcWWxZfFmMWZxZrFm8WcxZ3FnsWfxaDFocWixaPFpMWlxabFp8WoxanFqsWrxazFrcWuxa/FsMWxxbLFs8W0xbXFtsW3xbjFucW6xbvFvMW9xb7Fv8aAxoHGgsaDxoTGhcaGxofGiMaJxorGi8aMxo3GjsaPxpDGkcaSCivGk8aUxpXGlsaXxpjGmcaaxpvGnMadxp7Gn8agxqHGosajxqTGpcamxqfGqMapxqrGq8asxq3GrsavxrDGscayxrPGtMa1xrbGt8a4xrnGusa8xr3Gvsa/x4THhseHx4nHiseMx43HjsePx5DHkceSx5PHlMeVx5bHl8eYx5nHmsebx5wKK8edx57Hn8egx6HHosejx6THpcemx6fHqMepx6rHq8esx63Hrsevx7DHscezx7THtce2x7fHuMe5x7rHu8e8x73Hvse/yIDIgciCyIPIhMiFyIbIh8iIyInIisiLyIzIjciOyI/IkMiRyJLIk8iUyJXIlsiXyJjImciayJvInMidyJ7InworyKDIociiyKPIpMilyKbIp8ioyKnIqsiryKzIrciuyK/IsMixyLLIs8i0yLXItsi3yLjIuci6yLvIvMi9yL7Iv8mAyYHJkMmRyZLJk8mUyZXJlsmXyZjJmcmayZvJnMmdyZ7Jn8mgyaHJosmjyaTJpcmmyafJqMmpyarJq8msya3JrsmvCivJsMmxybLJs8m0ybXJtsm3ybjJucm6ybvJvMm9yb7Jv8qAyoHKgsqDyoTKhcqGyofKiMqJyorKi8qMyo3KjsqPypDKkcqSypPKlMqVypbKl8qYypnKmsqbypzKncqeyp/KoMqhyqLKo8qkyqXKpsqnyqjKqcqqyqvKrMqtyq7Kr86GzogKK86JzorOjM6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjQorz47PkM+Rz5LPk8+Uz5XPls+Xz5jPmc+az5vPnM+dz57Pn8+gz6HPos+jz6TPpc+mz6fPqM+pz6rPq8+sz63Prs+vz7DPsc+yz7PPtM+1z7fPuM+5z7rPu8+8z73Pvs+/0IDQgdCC0IPQhNCF0IbQh9CI0InQitCL0IzQjdCO0I/QkNCRCivQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0ZDRkdGS0ZMKK9GU0ZXRltGX0ZjRmdGa0ZvRnNGd0Z7Rn9Gg0aHRotGj0aTRpdGm0afRqNGp0arRq9Gs0a3RrtGv0bDRsdGy0bPRtNG10bbRt9G40bnRutG70bzRvdG+0b/SgNKB0orSi9KM0o3SjtKP0pDSkdKS0pPSlNKV0pbSl9KY0pnSmtKb0pzSnQor0p7Sn9Kg0qHSotKj0qTSpdKm0qfSqNKp0qrSq9Ks0q3SrtKv0rDSsdKy0rPStNK10rbSt9K40rnSutK70rzSvdK+0r/TgNOB04LTg9OE04XThtOH04jTidOK04vTjNON047TkNOR05LTk9OU05XTltOX05jTmdOa05vTnNOd057Tn9OgCivTodOi06PTpNOl06bTp9Oo06nTqtOr06zTrdOu06/TsNOx07LTs9O007XTttO307jTudSA1IHUgtSD1ITUhdSG1IfUiNSJ1IrUi9SM1I3UjtSP1LHUstSz1LTUtdS21LfUuNS51LrUu9S81L3UvtS/1YDVgdWC1YPVhNWF1YbVh9WI1YkKK9WK1YvVjNWN1Y7Vj9WQ1ZHVktWT1ZTVldWW1aHVotWj1aTVpdWm1afVqNWp1arVq9Ws1a3VrtWv1bDVsdWy1bPVtNW11bbVt9W41bnVutW71bzVvdW+1b/WgNaB1oLWg9aE1oXWhtaH4YKg4YKh4YKi4YKj4YKk4YKl4YKm4YKn4YKo4YKp4YKq4YKr4YKs4YKtCivhgq7hgq/hgrDhgrHhgrLhgrPhgrThgrXhgrbhgrfhgrjhgrnhgrrhgrvhgrzhgr3hgr7hgr/hg4Dhg4Hhg4Lhg4Phg4Thg4XhtIDhtIHhtILhtIPhtIThtIXhtIbhtIfhtIjhtInhtIrhtIvhtIzhtI3htI7htI/htJDhtJHhtJLhtJPhtJThtJXhtJbhtJfhtJjhtJnhtJrhtJvhtJzhtJ3htJ7htJ/htKDhtKHhtKLhtKPhtKThtKXhtKbhtKfhtKjhtKkKK+G0quG0q+G1ouG1o+G1pOG1peG1puG1p+G1qOG1qeG1quG1q+G1rOG1reG1ruG1r+G1sOG1seG1suG1s+G1tOG1teG1tuG1t+G1ueG1uuG1u+G1vOG1veG1vuG1v+G2gOG2geG2guG2g+G2hOG2heG2huG2h+G2iOG2ieG2iuG2i+G2jOG2jeG2juG2j+G2kOG2keG2kuG2k+G2lOG2leG2luG2l+G2mOG2meG2muG4gOG4geG4guG4g+G4hOG4heG4huG4hwor4biI4biJ4biK4biL4biM4biN4biO4biP4biQ4biR4biS4biT4biU4biV4biW4biX4biY4biZ4bia4bib4bic4bid4bie4bif4big4bih4bii4bij4bik4bil4bim4bin4bio4bip4biq4bir4bis4bit4biu4biv4biw4bix4biy4biz4bi04bi14bi24bi34bi44bi54bi64bi74bi84bi94bi+4bi/4bmA4bmB4bmC4bmD4bmE4bmF4bmG4bmH4bmI4bmJCivhuYrhuYvhuYzhuY3huY7huY/huZDhuZHhuZLhuZPhuZThuZXhuZbhuZfhuZjhuZnhuZrhuZvhuZzhuZ3huZ7huZ/huaDhuaHhuaLhuaPhuaThuaXhuabhuafhuajhuanhuarhuavhuazhua3hua7hua/hubDhubHhubLhubPhubThubXhubbhubfhubjhubnhubrhubvhubzhub3hub7hub/huoDhuoHhuoLhuoPhuoThuoXhuobhuofhuojhuonhuorhuosKK+G6jOG6jeG6juG6j+G6kOG6keG6kuG6k+G6lOG6leG6luG6l+G6mOG6meG6muG6m+G6oOG6oeG6ouG6o+G6pOG6peG6puG6p+G6qOG6qeG6quG6q+G6rOG6reG6ruG6r+G6sOG6seG6suG6s+G6tOG6teG6tuG6t+G6uOG6ueG6uuG6u+G6vOG6veG6vuG6v+G7gOG7geG7guG7g+G7hOG7heG7huG7h+G7iOG7ieG7iuG7i+G7jOG7jeG7juG7j+G7kOG7kQor4buS4buT4buU4buV4buW4buX4buY4buZ4bua4bub4buc4bud4bue4buf4bug4buh4bui4buj4buk4bul4bum4bun4buo4bup4buq4bur4bus4but4buu4buv4buw4bux4buy4buz4bu04bu14bu24bu34bu44bu54byA4byB4byC4byD4byE4byF4byG4byH4byI4byJ4byK4byL4byM4byN4byO4byP4byQ4byR4byS4byT4byU4byV4byY4byZ4bya4bybCivhvJzhvJ3hvKDhvKHhvKLhvKPhvKThvKXhvKbhvKfhvKjhvKnhvKrhvKvhvKzhvK3hvK7hvK/hvLDhvLHhvLLhvLPhvLThvLXhvLbhvLfhvLjhvLnhvLrhvLvhvLzhvL3hvL7hvL/hvYDhvYHhvYLhvYPhvYThvYXhvYjhvYnhvYrhvYvhvYzhvY3hvZDhvZHhvZLhvZPhvZThvZXhvZbhvZfhvZnhvZvhvZ3hvZ/hvaDhvaHhvaLhvaPhvaThvaXhvabhvacKK+G9qOG9qeG9quG9q+G9rOG9reG9ruG9r+G9sOG9seG9suG9s+G9tOG9teG9tuG9t+G9uOG9ueG9uuG9u+G9vOG9veG+gOG+geG+guG+g+G+hOG+heG+huG+h+G+kOG+keG+kuG+k+G+lOG+leG+luG+l+G+oOG+oeG+ouG+o+G+pOG+peG+puG+p+G+sOG+seG+suG+s+G+tOG+tuG+t+G+uOG+ueG+uuG+u+G+vuG/guG/g+G/hOG/huG/h+G/iOG/ieG/igor4b+L4b+Q4b+R4b+S4b+T4b+W4b+X4b+Y4b+Z4b+a4b+b4b+g4b+h4b+i4b+j4b+k4b+l4b+m4b+n4b+o4b+p4b+q4b+r4b+s4b+y4b+z4b+04b+24b+34b+44b+54b+64b+74oGx4oG/4oSC4oSH4oSK4oSL4oSM4oSN4oSO4oSP4oSQ4oSR4oSS4oST4oSV4oSZ4oSa4oSb4oSc4oSd4oSk4oSm4oSo4oSq4oSr4oSs4oSt4oSv4oSw4oSx4oSz4oS04oS5CitBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6wqrCtcK6w4DDgcOCw4PDhMOFw4bDh8OIw4nDigorw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O8w73DvsO/xIDEgcSCxIPEhMSFxIbEh8SIxInEisSLxIzEjcSOCivEj8SQxJHEksSTxJTElcSWxJfEmMSZxJrEm8ScxJ3EnsSfxKDEocSixKPEpMSlxKbEp8SoxKnEqsSrxKzErcSuxK/EsMSxxLLEs8S0xLXEtsS3xLjEucS6xLvEvMS9xL7Ev8WAxYHFgsWDxYTFhcWGxYfFiMWJxYrFi8WMxY3FjsWPxZAKK8WRxZLFk8WUxZXFlsWXxZjFmcWaxZvFnMWdxZ7Fn8WgxaHFosWjxaTFpcWmxafFqMWpxarFq8Wsxa3FrsWvxbDFscWyxbPFtMW1xbbFt8W4xbnFusW7xbzFvcW+xb/GgMaBxoLGg8aExoXGhsaHxojGicaKxovGjMaNxo7Gj8aQxpHGkgorxpPGlMaVxpbGl8aYxpnGmsabxpzGncaexp/GoMahxqLGo8akxqXGpsanxqjGqcaqxqvGrMatxq7Gr8awxrHGssazxrTGtca2xrfGuMa5xrrGvMa9xr7Gv8eEx4bHh8eJx4rHjMeNx47Hj8eQx5HHkseTx5THlceWx5fHmMeZx5rHm8ecCivHnceex5/HoMehx6LHo8ekx6XHpsenx6jHqceqx6vHrMetx67Hr8ewx7HHs8e0x7XHtse3x7jHuce6x7vHvMe9x77Hv8iAyIHIgsiDyITIhciGyIfIiMiJyIrIi8iMyI3IjsiPyJDIkciSyJPIlMiVyJbIl8iYyJnImsibyJzIncieyJ8KK8igyKHIosijyKTIpcimyKfIqMipyKrIq8isyK3IrsivyLDIsciyyLPItMi1yLbIt8i4yLnIusi7yLzIvci+yL/JgMmByZDJkcmSyZPJlMmVyZbJl8mYyZnJmsmbyZzJncmeyZ/JoMmhyaLJo8mkyaXJpsmnyajJqcmqyavJrMmtya7JrworybDJscmyybPJtMm1ybbJt8m4ybnJusm7ybzJvcm+yb/KgMqByoLKg8qEyoXKhsqHyojKicqKyovKjMqNyo7Kj8qQypHKksqTypTKlcqWypfKmMqZyprKm8qcyp3KnsqfyqDKocqiyqPKpMqlyqbKp8qoyqnKqsqryqzKrcquyq/Ohs6ICivOic6KzozOjs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz40KK8+Oz5DPkc+Sz5PPlM+Vz5bPl8+Yz5nPms+bz5zPnc+ez5/PoM+hz6LPo8+kz6XPps+nz6jPqc+qz6vPrM+tz67Pr8+wz7HPss+zz7TPtc+3z7jPuc+6z7vPvM+9z77Pv9CA0IHQgtCD0ITQhdCG0IfQiNCJ0IrQi9CM0I3QjtCP0JDQkQor0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9GQ0ZHRktGTCivRlNGV0ZbRl9GY0ZnRmtGb0ZzRndGe0Z/RoNGh0aLRo9Gk0aXRptGn0ajRqdGq0avRrNGt0a7Rr9Gw0bHRstGz0bTRtdG20bfRuNG50brRu9G80b3RvtG/0oDSgdKK0ovSjNKN0o7Sj9KQ0pHSktKT0pTSldKW0pfSmNKZ0prSm9Kc0p0KK9Ke0p/SoNKh0qLSo9Kk0qXSptKn0qjSqdKq0qvSrNKt0q7Sr9Kw0rHSstKz0rTStdK20rfSuNK50rrSu9K80r3SvtK/04DTgdOC04PThNOF04bTh9OI04nTitOL04zTjdOO05DTkdOS05PTlNOV05bTl9OY05nTmtOb05zTndOe05/ToAor06HTotOj06TTpdOm06fTqNOp06rTq9Os063TrtOv07DTsdOy07PTtNO107bTt9O407nUgNSB1ILUg9SE1IXUhtSH1IjUidSK1IvUjNSN1I7Uj9Sx1LLUs9S01LXUttS31LjUudS61LvUvNS91L7Uv9WA1YHVgtWD1YTVhdWG1YfViNWJCivVitWL1YzVjdWO1Y/VkNWR1ZLVk9WU1ZXVltWh1aLVo9Wk1aXVptWn1ajVqdWq1avVrNWt1a7Vr9Ww1bHVstWz1bTVtdW21bfVuNW51brVu9W81b3VvtW/1oDWgdaC1oPWhNaF1obWh+GCoOGCoeGCouGCo+GCpOGCpeGCpuGCp+GCqOGCqeGCquGCq+GCrOGCrQor4YKu4YKv4YKw4YKx4YKy4YKz4YK04YK14YK24YK34YK44YK54YK64YK74YK84YK94YK+4YK/4YOA4YOB4YOC4YOD4YOE4YOF4bSA4bSB4bSC4bSD4bSE4bSF4bSG4bSH4bSI4bSJ4bSK4bSL4bSM4bSN4bSO4bSP4bSQ4bSR4bSS4bST4bSU4bSV4bSW4bSX4bSY4bSZ4bSa4bSb4bSc4bSd4bSe4bSf4bSg4bSh4bSi4bSj4bSk4bSl4bSm4bSn4bSo4bSpCivhtKrhtKvhtaLhtaPhtaThtaXhtabhtafhtajhtanhtarhtavhtazhta3hta7hta/htbDhtbHhtbLhtbPhtbThtbXhtbbhtbfhtbnhtbrhtbvhtbzhtb3htb7htb/htoDhtoHhtoLhtoPhtoThtoXhtobhtofhtojhtonhtorhtovhtozhto3hto7hto/htpDhtpHhtpLhtpPhtpThtpXhtpbhtpfhtpjhtpnhtprhuIDhuIHhuILhuIPhuIThuIXhuIbhuIcKK+G4iOG4ieG4iuG4i+G4jOG4jeG4juG4j+G4kOG4keG4kuG4k+G4lOG4leG4luG4l+G4mOG4meG4muG4m+G4nOG4neG4nuG4n+G4oOG4oeG4ouG4o+G4pOG4peG4puG4p+G4qOG4qeG4quG4q+G4rOG4reG4ruG4r+G4sOG4seG4suG4s+G4tOG4teG4tuG4t+G4uOG4ueG4uuG4u+G4vOG4veG4vuG4v+G5gOG5geG5guG5g+G5hOG5heG5huG5h+G5iOG5iQor4bmK4bmL4bmM4bmN4bmO4bmP4bmQ4bmR4bmS4bmT4bmU4bmV4bmW4bmX4bmY4bmZ4bma4bmb4bmc4bmd4bme4bmf4bmg4bmh4bmi4bmj4bmk4bml4bmm4bmn4bmo4bmp4bmq4bmr4bms4bmt4bmu4bmv4bmw4bmx4bmy4bmz4bm04bm14bm24bm34bm44bm54bm64bm74bm84bm94bm+4bm/4bqA4bqB4bqC4bqD4bqE4bqF4bqG4bqH4bqI4bqJ4bqK4bqLCivhuozhuo3huo7huo/hupDhupHhupLhupPhupThupXhupbhupfhupjhupnhuprhupvhuqDhuqHhuqLhuqPhuqThuqXhuqbhuqfhuqjhuqnhuqrhuqvhuqzhuq3huq7huq/hurDhurHhurLhurPhurThurXhurbhurfhurjhurnhurrhurvhurzhur3hur7hur/hu4Dhu4Hhu4Lhu4Phu4Thu4Xhu4bhu4fhu4jhu4nhu4rhu4vhu4zhu43hu47hu4/hu5Dhu5EKK+G7kuG7k+G7lOG7leG7luG7l+G7mOG7meG7muG7m+G7nOG7neG7nuG7n+G7oOG7oeG7ouG7o+G7pOG7peG7puG7p+G7qOG7qeG7quG7q+G7rOG7reG7ruG7r+G7sOG7seG7suG7s+G7tOG7teG7tuG7t+G7uOG7ueG8gOG8geG8guG8g+G8hOG8heG8huG8h+G8iOG8ieG8iuG8i+G8jOG8jeG8juG8j+G8kOG8keG8kuG8k+G8lOG8leG8mOG8meG8muG8mwor4byc4byd4byg4byh4byi4byj4byk4byl4bym4byn4byo4byp4byq4byr4bys4byt4byu4byv4byw4byx4byy4byz4by04by14by24by34by44by54by64by74by84by94by+4by/4b2A4b2B4b2C4b2D4b2E4b2F4b2I4b2J4b2K4b2L4b2M4b2N4b2Q4b2R4b2S4b2T4b2U4b2V4b2W4b2X4b2Z4b2b4b2d4b2f4b2g4b2h4b2i4b2j4b2k4b2l4b2m4b2nCivhvajhvanhvarhvavhvazhva3hva7hva/hvbDhvbHhvbLhvbPhvbThvbXhvbbhvbfhvbjhvbnhvbrhvbvhvbzhvb3hvoDhvoHhvoLhvoPhvoThvoXhvobhvofhvpDhvpHhvpLhvpPhvpThvpXhvpbhvpfhvqDhvqHhvqLhvqPhvqThvqXhvqbhvqfhvrDhvrHhvrLhvrPhvrThvrbhvrfhvrjhvrnhvrrhvrvhvr7hv4Lhv4Phv4Thv4bhv4fhv4jhv4nhv4oKK+G/i+G/kOG/keG/kuG/k+G/luG/l+G/mOG/meG/muG/m+G/oOG/oeG/ouG/o+G/pOG/peG/puG/p+G/qOG/qeG/quG/q+G/rOG/suG/s+G/tOG/tuG/t+G/uOG/ueG/uuG/u+KBseKBv+KEguKEh+KEiuKEi+KEjOKEjeKEjuKEj+KEkOKEkeKEkuKEk+KEleKEmeKEmuKEm+KEnOKEneKEpOKEpuKEqOKEquKEq+KErOKEreKEr+KEsOKEseKEs+KEtOKEuQorQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esKqwrXCusOAw4HDgsODw4TDhcOGw4fDiMOJw4oKK8OLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7jDucO6w7vDvMO9w77Dv8SAxIHEgsSDxITEhcSGxIfEiMSJxIrEi8SMxI3EjgorxI/EkMSRxJLEk8SUxJXElsSXxJjEmcSaxJvEnMSdxJ7En8SgxKHEosSjxKTEpcSmxKfEqMSpxKrEq8SsxK3ErsSvxLDEscSyxLPEtMS1xLbEt8S4xLnEusS7xLzEvcS+xL/FgMWBxYLFg8WExYXFhsWHxYjFicWKxYvFjMWNxY7Fj8WQCivFkcWSxZPFlMWVxZbFl8WYxZnFmsWbxZzFncWexZ/FoMWhxaLFo8WkxaXFpsWnxajFqcWqxavFrMWtxa7Fr8WwxbHFssWzxbTFtcW2xbfFuMW5xbrFu8W8xb3FvsW/xoDGgcaCxoPGhMaFxobGh8aIxonGisaLxozGjcaOxo/GkMaRxpIKK8aTxpTGlcaWxpfGmMaZxprGm8acxp3GnsafxqDGocaixqPGpMalxqbGp8aoxqnGqsarxqzGrcauxq/GsMaxxrLGs8a0xrXGtsa3xrjGuca6xrzGvca+xr/HhMeGx4fHiceKx4zHjceOx4/HkMeRx5LHk8eUx5XHlseXx5jHmceax5vHnAorx53Hnsefx6DHoceix6PHpMelx6bHp8eox6nHqserx6zHrceux6/HsMexx7PHtMe1x7bHt8e4x7nHuse7x7zHvce+x7/IgMiByILIg8iEyIXIhsiHyIjIiciKyIvIjMiNyI7Ij8iQyJHIksiTyJTIlciWyJfImMiZyJrIm8icyJ3InsifCivIoMihyKLIo8ikyKXIpsinyKjIqciqyKvIrMityK7Ir8iwyLHIssizyLTItci2yLfIuMi5yLrIu8i8yL3Ivsi/yYDJgcmQyZHJksmTyZTJlcmWyZfJmMmZyZrJm8mcyZ3JnsmfyaDJocmiyaPJpMmlyabJp8moyanJqsmryazJrcmuya8KK8mwybHJssmzybTJtcm2ybfJuMm5ybrJu8m8yb3Jvsm/yoDKgcqCyoPKhMqFyobKh8qIyonKisqLyozKjcqOyo/KkMqRypLKk8qUypXKlsqXypjKmcqaypvKnMqdyp7Kn8qgyqHKosqjyqTKpcqmyqfKqMqpyqrKq8qsyq3KrsqvzobOiAorzonOis6Mzo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+NCivPjs+Qz5HPks+Tz5TPlc+Wz5fPmM+Zz5rPm8+cz53Pns+fz6DPoc+iz6PPpM+lz6bPp8+oz6nPqs+rz6zPrc+uz6/PsM+xz7LPs8+0z7XPt8+4z7nPus+7z7zPvc++z7/QgNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjNCN0I7Qj9CQ0JEKK9CS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/RkNGR0ZLRkwor0ZTRldGW0ZfRmNGZ0ZrRm9Gc0Z3RntGf0aDRodGi0aPRpNGl0abRp9Go0anRqtGr0azRrdGu0a/RsNGx0bLRs9G00bXRttG30bjRudG60bvRvNG90b7Rv9KA0oHSitKL0ozSjdKO0o/SkNKR0pLSk9KU0pXSltKX0pjSmdKa0pvSnNKdCivSntKf0qDSodKi0qPSpNKl0qbSp9Ko0qnSqtKr0qzSrdKu0q/SsNKx0rLSs9K00rXSttK30rjSudK60rvSvNK90r7Sv9OA04HTgtOD04TThdOG04fTiNOJ04rTi9OM043TjtOQ05HTktOT05TTldOW05fTmNOZ05rTm9Oc053TntOf06AKK9Oh06LTo9Ok06XTptOn06jTqdOq06vTrNOt067Tr9Ow07HTstOz07TTtdO207fTuNO51IDUgdSC1IPUhNSF1IbUh9SI1InUitSL1IzUjdSO1I/UsdSy1LPUtNS11LbUt9S41LnUutS71LzUvdS+1L/VgNWB1YLVg9WE1YXVhtWH1YjViQor1YrVi9WM1Y3VjtWP1ZDVkdWS1ZPVlNWV1ZbVodWi1aPVpNWl1abVp9Wo1anVqtWr1azVrdWu1a/VsNWx1bLVs9W01bXVttW31bjVudW61bvVvNW91b7Vv9aA1oHWgtaD1oTWhdaG1ofhgqDhgqHhgqLhgqPhgqThgqXhgqbhgqfhgqjhgqnhgqrhgqvhgqzhgq0KK+GCruGCr+GCsOGCseGCsuGCs+GCtOGCteGCtuGCt+GCuOGCueGCuuGCu+GCvOGCveGCvuGCv+GDgOGDgeGDguGDg+GDhOGDheG0gOG0geG0guG0g+G0hOG0heG0huG0h+G0iOG0ieG0iuG0i+G0jOG0jeG0juG0j+G0kOG0keG0kuG0k+G0lOG0leG0luG0l+G0mOG0meG0muG0m+G0nOG0neG0nuG0n+G0oOG0oeG0ouG0o+G0pOG0peG0puG0p+G0qOG0qQor4bSq4bSr4bWi4bWj4bWk4bWl4bWm4bWn4bWo4bWp4bWq4bWr4bWs4bWt4bWu4bWv4bWw4bWx4bWy4bWz4bW04bW14bW24bW34bW54bW64bW74bW84bW94bW+4bW/4baA4baB4baC4baD4baE4baF4baG4baH4baI4baJ4baK4baL4baM4baN4baO4baP4baQ4baR4baS4baT4baU4baV4baW4baX4baY4baZ4baa4biA4biB4biC4biD4biE4biF4biG4biHCivhuIjhuInhuIrhuIvhuIzhuI3huI7huI/huJDhuJHhuJLhuJPhuJThuJXhuJbhuJfhuJjhuJnhuJrhuJvhuJzhuJ3huJ7huJ/huKDhuKHhuKLhuKPhuKThuKXhuKbhuKfhuKjhuKnhuKrhuKvhuKzhuK3huK7huK/huLDhuLHhuLLhuLPhuLThuLXhuLbhuLfhuLjhuLnhuLrhuLvhuLzhuL3huL7huL/huYDhuYHhuYLhuYPhuYThuYXhuYbhuYfhuYjhuYkKK+G5iuG5i+G5jOG5jeG5juG5j+G5kOG5keG5kuG5k+G5lOG5leG5luG5l+G5mOG5meG5muG5m+G5nOG5neG5nuG5n+G5oOG5oeG5ouG5o+G5pOG5peG5puG5p+G5qOG5qeG5quG5q+G5rOG5reG5ruG5r+G5sOG5seG5suG5s+G5tOG5teG5tuG5t+G5uOG5ueG5uuG5u+G5vOG5veG5vuG5v+G6gOG6geG6guG6g+G6hOG6heG6huG6h+G6iOG6ieG6iuG6iwor4bqM4bqN4bqO4bqP4bqQ4bqR4bqS4bqT4bqU4bqV4bqW4bqX4bqY4bqZ4bqa4bqb4bqg4bqh4bqi4bqj4bqk4bql4bqm4bqn4bqo4bqp4bqq4bqr4bqs4bqt4bqu4bqv4bqw4bqx4bqy4bqz4bq04bq14bq24bq34bq44bq54bq64bq74bq84bq94bq+4bq/4buA4buB4buC4buD4buE4buF4buG4buH4buI4buJ4buK4buL4buM4buN4buO4buP4buQ4buRCivhu5Lhu5Phu5Thu5Xhu5bhu5fhu5jhu5nhu5rhu5vhu5zhu53hu57hu5/hu6Dhu6Hhu6Lhu6Phu6Thu6Xhu6bhu6fhu6jhu6nhu6rhu6vhu6zhu63hu67hu6/hu7Dhu7Hhu7Lhu7Phu7Thu7Xhu7bhu7fhu7jhu7nhvIDhvIHhvILhvIPhvIThvIXhvIbhvIfhvIjhvInhvIrhvIvhvIzhvI3hvI7hvI/hvJDhvJHhvJLhvJPhvJThvJXhvJjhvJnhvJrhvJsKK+G8nOG8neG8oOG8oeG8ouG8o+G8pOG8peG8puG8p+G8qOG8qeG8quG8q+G8rOG8reG8ruG8r+G8sOG8seG8suG8s+G8tOG8teG8tuG8t+G8uOG8ueG8uuG8u+G8vOG8veG8vuG8v+G9gOG9geG9guG9g+G9hOG9heG9iOG9ieG9iuG9i+G9jOG9jeG9kOG9keG9kuG9k+G9lOG9leG9luG9l+G9meG9m+G9neG9n+G9oOG9oeG9ouG9o+G9pOG9peG9puG9pwor4b2o4b2p4b2q4b2r4b2s4b2t4b2u4b2v4b2w4b2x4b2y4b2z4b204b214b224b234b244b254b264b274b284b294b6A4b6B4b6C4b6D4b6E4b6F4b6G4b6H4b6Q4b6R4b6S4b6T4b6U4b6V4b6W4b6X4b6g4b6h4b6i4b6j4b6k4b6l4b6m4b6n4b6w4b6x4b6y4b6z4b604b624b634b644b654b664b674b6+4b+C4b+D4b+E4b+G4b+H4b+I4b+J4b+KCivhv4vhv5Dhv5Hhv5Lhv5Phv5bhv5fhv5jhv5nhv5rhv5vhv6Dhv6Hhv6Lhv6Phv6Thv6Xhv6bhv6fhv6jhv6nhv6rhv6vhv6zhv7Lhv7Phv7Thv7bhv7fhv7jhv7nhv7rhv7vigbHigb/ihILihIfihIrihIvihIzihI3ihI7ihI/ihJDihJHihJLihJPihJXihJnihJrihJvihJzihJ3ihKTihKbihKjihKrihKvihKzihK3ihK/ihLDihLHihLPihLTihLkKK0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXrCqsK1wrrDgMOBw4LDg8OEw4XDhsOHw4jDicOKCivDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO4w7nDusO7w7zDvcO+w7/EgMSBxILEg8SExIXEhsSHxIjEicSKxIvEjMSNxI4KK8SPxJDEkcSSxJPElMSVxJbEl8SYxJnEmsSbxJzEncSexJ/EoMShxKLEo8SkxKXEpsSnxKjEqcSqxKvErMStxK7Er8SwxLHEssSzxLTEtcS2xLfEuMS5xLrEu8S8xL3EvsS/xYDFgcWCxYPFhMWFxYbFh8WIxYnFisWLxYzFjcWOxY/FkAorxZHFksWTxZTFlcWWxZfFmMWZxZrFm8WcxZ3FnsWfxaDFocWixaPFpMWlxabFp8WoxanFqsWrxazFrcWuxa/FsMWxxbLFs8W0xbXFtsW3xbjFucW6xbvFvMW9xb7Fv8aAxoHGgsaDxoTGhcaGxofGiMaJxorGi8aMxo3GjsaPxpDGkcaSCivGk8aUxpXGlsaXxpjGmcaaxpvGnMadxp7Gn8agxqHGosajxqTGpcamxqfGqMapxqrGq8asxq3GrsavxrDGscayxrPGtMa1xrbGt8a4xrnGusa8xr3Gvsa/x4THhseHx4nHiseMx43HjsePx5DHkceSx5PHlMeVx5bHl8eYx5nHmsebx5wKK8edx57Hn8egx6HHosejx6THpcemx6fHqMepx6rHq8esx63Hrsevx7DHscezx7THtce2x7fHuMe5x7rHu8e8x73Hvse/yIDIgciCyIPIhMiFyIbIh8iIyInIisiLyIzIjciOyI/IkMiRyJLIk8iUyJXIlsiXyJjImciayJvInMidyJ7InworyKDIociiyKPIpMilyKbIp8ioyKnIqsiryKzIrciuyK/IsMixyLLIs8i0yLXItsi3yLjIuci6yLvIvMi9yL7Iv8mAyYHJkMmRyZLJk8mUyZXJlsmXyZjJmcmayZvJnMmdyZ7Jn8mgyaHJosmjyaTJpcmmyafJqMmpyarJq8msya3JrsmvCivJsMmxybLJs8m0ybXJtsm3ybjJucm6ybvJvMm9yb7Jv8qAyoHKgsqDyoTKhcqGyofKiMqJyorKi8qMyo3KjsqPypDKkcqSypPKlMqVypbKl8qYypnKmsqbypzKncqeyp/KoMqhyqLKo8qkyqXKpsqnyqjKqcqqyqvKrMqtyq7Kr86GzogKK86JzorOjM6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjQorz47PkM+Rz5LPk8+Uz5XPls+Xz5jPmc+az5vPnM+dz57Pn8+gz6HPos+jz6TPpc+mz6fPqM+pz6rPq8+sz63Prs+vz7DPsc+yz7PPtM+1z7fPuM+5z7rPu8+8z73Pvs+/0IDQgdCC0IPQhNCF0IbQh9CI0InQitCL0IzQjdCO0I/QkNCRCivQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0ZDRkdGS0ZMKK9GU0ZXRltGX0ZjRmdGa0ZvRnNGd0Z7Rn9Gg0aHRotGj0aTRpdGm0afRqNGp0arRq9Gs0a3RrtGv0bDRsdGy0bPRtNG10bbRt9G40bnRutG70bzRvdG+0b/SgNKB0orSi9KM0o3SjtKP0pDSkdKS0pPSlNKV0pbSl9KY0pnSmtKb0pzSnQor0p7Sn9Kg0qHSotKj0qTSpdKm0qfSqNKp0qrSq9Ks0q3SrtKv0rDSsdKy0rPStNK10rbSt9K40rnSutK70rzSvdK+0r/TgNOB04LTg9OE04XThtOH04jTidOK04vTjNON047TkNOR05LTk9OU05XTltOX05jTmdOa05vTnNOd057Tn9OgCivTodOi06PTpNOl06bTp9Oo06nTqtOr06zTrdOu06/TsNOx07LTs9O007XTttO307jTudSA1IHUgtSD1ITUhdSG1IfUiNSJ1IrUi9SM1I3UjtSP1LHUstSz1LTUtdS21LfUuNS51LrUu9S81L3UvtS/1YDVgdWC1YPVhNWF1YbVh9WI1YkKK9WK1YvVjNWN1Y7Vj9WQ1ZHVktWT1ZTVldWW1aHVotWj1aTVpdWm1afVqNWp1arVq9Ws1a3VrtWv1bDVsdWy1bPVtNW11bbVt9W41bnVutW71bzVvdW+1b/WgNaB1oLWg9aE1oXWhtaH4YKg4YKh4YKi4YKj4YKk4YKl4YKm4YKn4YKo4YKp4YKq4YKr4YKs4YKtCivhgq7hgq/hgrDhgrHhgrLhgrPhgrThgrXhgrbhgrfhgrjhgrnhgrrhgrvhgrzhgr3hgr7hgr/hg4Dhg4Hhg4Lhg4Phg4Thg4XhtIDhtIHhtILhtIPhtIThtIXhtIbhtIfhtIjhtInhtIrhtIvhtIzhtI3htI7htI/htJDhtJHhtJLhtJPhtJThtJXhtJbhtJfhtJjhtJnhtJrhtJvhtJzhtJ3htJ7htJ/htKDhtKHhtKLhtKPhtKThtKXhtKbhtKfhtKjhtKkKK+G0quG0q+G1ouG1o+G1pOG1peG1puG1p+G1qOG1qeG1quG1q+G1rOG1reG1ruG1r+G1sOG1seG1suG1s+G1tOG1teG1tuG1t+G1ueG1uuG1u+G1vOG1veG1vuG1v+G2gOG2geG2guG2g+G2hOG2heG2huG2h+G2iOG2ieG2iuG2i+G2jOG2jeG2juG2j+G2kOG2keG2kuG2k+G2lOG2leG2luG2l+G2mOG2meG2muG4gOG4geG4guG4g+G4hOG4heG4huG4hwor4biI4biJ4biK4biL4biM4biN4biO4biP4biQ4biR4biS4biT4biU4biV4biW4biX4biY4biZ4bia4bib4bic4bid4bie4bif4big4bih4bii4bij4bik4bil4bim4bin4bio4bip4biq4bir4bis4bit4biu4biv4biw4bix4biy4biz4bi04bi14bi24bi34bi44bi54bi64bi74bi84bi94bi+4bi/4bmA4bmB4bmC4bmD4bmE4bmF4bmG4bmH4bmI4bmJCivhuYrhuYvhuYzhuY3huY7huY/huZDhuZHhuZLhuZPhuZThuZXhuZbhuZfhuZjhuZnhuZrhuZvhuZzhuZ3huZ7huZ/huaDhuaHhuaLhuaPhuaThuaXhuabhuafhuajhuanhuarhuavhuazhua3hua7hua/hubDhubHhubLhubPhubThubXhubbhubfhubjhubnhubrhubvhubzhub3hub7hub/huoDhuoHhuoLhuoPhuoThuoXhuobhuofhuojhuonhuorhuosKK+G6jOG6jeG6juG6j+G6kOG6keG6kuG6k+G6lOG6leG6luG6l+G6mOG6meG6muG6m+G6oOG6oeG6ouG6o+G6pOG6peG6puG6p+G6qOG6qeG6quG6q+G6rOG6reG6ruG6r+G6sOG6seG6suG6s+G6tOG6teG6tuG6t+G6uOG6ueG6uuG6u+G6vOG6veG6vuG6v+G7gOG7geG7guG7g+G7hOG7heG7huG7h+G7iOG7ieG7iuG7i+G7jOG7jeG7juG7j+G7kOG7kQor4buS4buT4buU4buV4buW4buX4buY4buZ4bua4bub4buc4bud4bue4buf4bug4buh4bui4buj4buk4bul4bum4bun4buo4bup4buq4bur4bus4but4buu4buv4buw4bux4buy4buz4bu04bu14bu24bu34bu44bu54byA4byB4byC4byD4byE4byF4byG4byH4byI4byJ4byK4byL4byM4byN4byO4byP4byQ4byR4byS4byT4byU4byV4byY4byZ4bya4bybCivhvJzhvJ3hvKDhvKHhvKLhvKPhvKThvKXhvKbhvKfhvKjhvKnhvKrhvKvhvKzhvK3hvK7hvK/hvLDhvLHhvLLhvLPhvLThvLXhvLbhvLfhvLjhvLnhvLrhvLvhvLzhvL3hvL7hvL/hvYDhvYHhvYLhvYPhvYThvYXhvYjhvYnhvYrhvYvhvYzhvY3hvZDhvZHhvZLhvZPhvZThvZXhvZbhvZfhvZnhvZvhvZ3hvZ/hvaDhvaHhvaLhvaPhvaThvaXhvabhvacKK+G9qOG9qeG9quG9q+G9rOG9reG9ruG9r+G9sOG9seG9suG9s+G9tOG9teG9tuG9t+G9uOG9ueG9uuG9u+G9vOG9veG+gOG+geG+guG+g+G+hOG+heG+huG+h+G+kOG+keG+kuG+k+G+lOG+leG+luG+l+G+oOG+oeG+ouG+o+G+pOG+peG+puG+p+G+sOG+seG+suG+s+G+tOG+tuG+t+G+uOG+ueG+uuG+u+G+vuG/guG/g+G/hOG/huG/h+G/iOG/ieG/igor4b+L4b+Q4b+R4b+S4b+T4b+W4b+X4b+Y4b+Z4b+a4b+b4b+g4b+h4b+i4b+j4b+k4b+l4b+m4b+n4b+o4b+p4b+q4b+r4b+s4b+y4b+z4b+04b+24b+34b+44b+54b+64b+74oGx4oG/4oSC4oSH4oSK4oSL4oSM4oSN4oSO4oSP4oSQ4oSR4oSS4oST4oSV4oSZ4oSa4oSb4oSc4oSd4oSk4oSm4oSo4oSq4oSr4oSs4oSt4oSv4oSw4oSx4oSz4oS04oS5CitBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6wqrCtcK6w4DDgcOCw4PDhMOFw4bDh8OIw4nDigorw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O8w73DvsO/xIDEgcSCxIPEhMSFxIbEh8SIxInEisSLxIzEjcSOCivEj8SQxJHEksSTxJTElcSWxJfEmMSZxJrEm8ScxJ3EnsSfxKDEocSixKPEpMSlxKbEp8SoxKnEqsSrxKzErcSuxK/EsMSxxLLEs8S0xLXEtsS3xLjEucS6xLvEvMS9xL7Ev8WAxYHFgsWDxYTFhcWGxYfFiMWJxYrFi8WMxY3FjsWPxZAKK8WRxZLFk8WUxZXFlsWXxZjFmcWaxZvFnMWdxZ7Fn8WgxaHFosWjxaTFpcWmxafFqMWpxarFq8Wsxa3FrsWvxbDFscWyxbPFtMW1xbbFt8W4xbnFusW7xbzFvcW+xb/GgMaBxoLGg8aExoXGhsaHxojGicaKxovGjMaNxo7Gj8aQxpHGkgorxpPGlMaVxpbGl8aYxpnGmsabxpzGncaexp/GoMahxqLGo8akxqXGpsanxqjGqcaqxqvGrMatxq7Gr8awxrHGssazxrTGtca2xrfGuMa5xrrGvMa9xr7Gv8eEx4bHh8eJx4rHjMeNx47Hj8eQx5HHkseTx5THlceWx5fHmMeZx5rHm8ecCivHnceex5/HoMehx6LHo8ekx6XHpsenx6jHqceqx6vHrMetx67Hr8ewx7HHs8e0x7XHtse3x7jHuce6x7vHvMe9x77Hv8iAyIHIgsiDyITIhciGyIfIiMiJyIrIi8iMyI3IjsiPyJDIkciSyJPIlMiVyJbIl8iYyJnImsibyJzIncieyJ8KK8igyKHIosijyKTIpcimyKfIqMipyKrIq8isyK3IrsivyLDIsciyyLPItMi1yLbIt8i4yLnIusi7yLzIvci+yL/JgMmByZDJkcmSyZPJlMmVyZbJl8mYyZnJmsmbyZzJncmeyZ/JoMmhyaLJo8mkyaXJpsmnyajJqcmqyavJrMmtya7JrworybDJscmyybPJtMm1ybbJt8m4ybnJusm7ybzJvcm+yb/KgMqByoLKg8qEyoXKhsqHyojKicqKyovKjMqNyo7Kj8qQypHKksqTypTKlcqWypfKmMqZyprKm8qcyp3KnsqfyqDKocqiyqPKpMqlyqbKp8qoyqnKqsqryqzKrcquyq/Ohs6ICivOic6KzozOjs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz40KK8+Oz5DPkc+Sz5PPlM+Vz5bPl8+Yz5nPms+bz5zPnc+ez5/PoM+hz6LPo8+kz6XPps+nz6jPqc+qz6vPrM+tz67Pr8+wz7HPss+zz7TPtc+3z7jPuc+6z7vPvM+9z77Pv9CA0IHQgtCD0ITQhdCG0IfQiNCJ0IrQi9CM0I3QjtCP0JDQkQor0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9GQ0ZHRktGTCivRlNGV0ZbRl9GY0ZnRmtGb0ZzRndGe0Z/RoNGh0aLRo9Gk0aXRptGn0ajRqdGq0avRrNGt0a7Rr9Gw0bHRstGz0bTRtdG20bfRuNG50brRu9G80b3RvtG/0oDSgdKK0ovSjNKN0o7Sj9KQ0pHSktKT0pTSldKW0pfSmNKZ0prSm9Kc0p0KK9Ke0p/SoNKh0qLSo9Kk0qXSptKn0qjSqdKq0qvSrNKt0q7Sr9Kw0rHSstKz0rTStdK20rfSuNK50rrSu9K80r3SvtK/04DTgdOC04PThNOF04bTh9OI04nTitOL04zTjdOO05DTkdOS05PTlNOV05bTl9OY05nTmtOb05zTndOe05/ToAor06HTotOj06TTpdOm06fTqNOp06rTq9Os063TrtOv07DTsdOy07PTtNO107bTt9O407nUgNSB1ILUg9SE1IXUhtSH1IjUidSK1IvUjNSN1I7Uj9Sx1LLUs9S01LXUttS31LjUudS61LvUvNS91L7Uv9WA1YHVgtWD1YTVhdWG1YfViNWJCivVitWL1YzVjdWO1Y/VkNWR1ZLVk9WU1ZXVltWh1aLVo9Wk1aXVptWn1ajVqdWq1avVrNWt1a7Vr9Ww1bHVstWz1bTVtdW21bfVuNW51brVu9W81b3VvtW/1oDWgdaC1oPWhNaF1obWh+GCoOGCoeGCouGCo+GCpOGCpeGCpuGCp+GCqOGCqeGCquGCq+GCrOGCrQor4YKu4YKv4YKw4YKx4YKy4YKz4YK04YK14YK24YK34YK44YK54YK64YK74YK84YK94YK+4YK/4YOA4YOB4YOC4YOD4YOE4YOF4bSA4bSB4bSC4bSD4bSE4bSF4bSG4bSH4bSI4bSJ4bSK4bSL4bSM4bSN4bSO4bSP4bSQ4bSR4bSS4bST4bSU4bSV4bSW4bSX4bSY4bSZ4bSa4bSb4bSc4bSd4bSe4bSf4bSg4bSh4bSi4bSj4bSk4bSl4bSm4bSn4bSo4bSpCivhtKrhtKvhtaLhtaPhtaThtaXhtabhtafhtajhtanhtarhtavhtazhta3hta7hta/htbDhtbHhtbLhtbPhtbThtbXhtbbhtbfhtbnhtbrhtbvhtbzhtb3htb7htb/htoDhtoHhtoLhtoPhtoThtoXhtobhtofhtojhtonhtorhtovhtozhto3hto7hto/htpDhtpHhtpLhtpPhtpThtpXhtpbhtpfhtpjhtpnhtprhuIDhuIHhuILhuIPhuIThuIXhuIbhuIcKK+G4iOG4ieG4iuG4i+G4jOG4jeG4juG4j+G4kOG4keG4kuG4k+G4lOG4leG4luG4l+G4mOG4meG4muG4m+G4nOG4neG4nuG4n+G4oOG4oeG4ouG4o+G4pOG4peG4puG4p+G4qOG4qeG4quG4q+G4rOG4reG4ruG4r+G4sOG4seG4suG4s+G4tOG4teG4tuG4t+G4uOG4ueG4uuG4u+G4vOG4veG4vuG4v+G5gOG5geG5guG5g+G5hOG5heG5huG5h+G5iOG5iQor4bmK4bmL4bmM4bmN4bmO4bmP4bmQ4bmR4bmS4bmT4bmU4bmV4bmW4bmX4bmY4bmZ4bma4bmb4bmc4bmd4bme4bmf4bmg4bmh4bmi4bmj4bmk4bml4bmm4bmn4bmo4bmp4bmq4bmr4bms4bmt4bmu4bmv4bmw4bmx4bmy4bmz4bm04bm14bm24bm34bm44bm54bm64bm74bm84bm94bm+4bm/4bqA4bqB4bqC4bqD4bqE4bqF4bqG4bqH4bqI4bqJ4bqK4bqLCivhuozhuo3huo7huo/hupDhupHhupLhupPhupThupXhupbhupfhupjhupnhuprhupvhuqDhuqHhuqLhuqPhuqThuqXhuqbhuqfhuqjhuqnhuqrhuqvhuqzhuq3huq7huq/hurDhurHhurLhurPhurThurXhurbhurfhurjhurnhurrhurvhurzhur3hur7hur/hu4Dhu4Hhu4Lhu4Phu4Thu4Xhu4bhu4fhu4jhu4nhu4rhu4vhu4zhu43hu47hu4/hu5Dhu5EKK+G7kuG7k+G7lOG7leG7luG7l+G7mOG7meG7muG7m+G7nOG7neG7nuG7n+G7oOG7oeG7ouG7o+G7pOG7peG7puG7p+G7qOG7qeG7quG7q+G7rOG7reG7ruG7r+G7sOG7seG7suG7s+G7tOG7teG7tuG7t+G7uOG7ueG8gOG8geG8guG8g+G8hOG8heG8huG8h+G8iOG8ieG8iuG8i+G8jOG8jeG8juG8j+G8kOG8keG8kuG8k+G8lOG8leG8mOG8meG8muG8mwor4byc4byd4byg4byh4byi4byj4byk4byl4bym4byn4byo4byp4byq4byr4bys4byt4byu4byv4byw4byx4byy4byz4by04by14by24by34by44by54by64by74by84by94by+4by/4b2A4b2B4b2C4b2D4b2E4b2F4b2I4b2J4b2K4b2L4b2M4b2N4b2Q4b2R4b2S4b2T4b2U4b2V4b2W4b2X4b2Z4b2b4b2d4b2f4b2g4b2h4b2i4b2j4b2k4b2l4b2m4b2nCivhvajhvanhvarhvavhvazhva3hva7hva/hvbDhvbHhvbLhvbPhvbThvbXhvbbhvbfhvbjhvbnhvbrhvbvhvbzhvb3hvoDhvoHhvoLhvoPhvoThvoXhvobhvofhvpDhvpHhvpLhvpPhvpThvpXhvpbhvpfhvqDhvqHhvqLhvqPhvqThvqXhvqbhvqfhvrDhvrHhvrLhvrPhvrThvrbhvrfhvrjhvrnhvrrhvrvhvr7hv4Lhv4Phv4Thv4bhv4fhv4jhv4nhv4oKK+G/i+G/kOG/keG/kuG/k+G/luG/l+G/mOG/meG/muG/m+G/oOG/oeG/ouG/o+G/pOG/peG/puG/p+G/qOG/qeG/quG/q+G/rOG/suG/s+G/tOG/tuG/t+G/uOG/ueG/uuG/u+KBseKBv+KEguKEh+KEiuKEi+KEjOKEjeKEjuKEj+KEkOKEkeKEkuKEk+KEleKEmeKEmuKEm+KEnOKEneKEpOKEpuKEqOKEquKEq+KErOKEreKEr+KEsOKEseKEs+KEtOKEuQorQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esKqwrXCusOAw4HDgsODw4TDhcOGw4fDiMOJw4oKK8OLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7jDucO6w7vDvMO9w77Dv8SAxIHEgsSDxITEhcSGxIfEiMSJxIrEi8SMxI3EjgorxI/EkMSRxJLEk8SUxJXElsSXxJjEmcSaxJvEnMSdxJ7En8SgxKHEosSjxKTEpcSmxKfEqMSpxKrEq8SsxK3ErsSvxLDEscSyxLPEtMS1xLbEt8S4xLnEusS7xLzEvcS+xL/FgMWBxYLFg8WExYXFhsWHxYjFicWKxYvFjMWNxY7Fj8WQCivFkcWSxZPFlMWVxZbFl8WYxZnFmsWbxZzFncWexZ/FoMWhxaLFo8WkxaXFpsWnxajFqcWqxavFrMWtxa7Fr8WwxbHFssWzxbTFtcW2xbfFuMW5xbrFu8W8xb3FvsW/xoDGgcaCxoPGhMaFxobGh8aIxonGisaLxozGjcaOxo/GkMaRxpIKK8aTxpTGlcaWxpfGmMaZxprGm8acxp3GnsafxqDGocaixqPGpMalxqbGp8aoxqnGqsarxqzGrcauxq/GsMaxxrLGs8a0xrXGtsa3xrjGuca6xrzGvca+xr/HhMeGx4fHiceKx4zHjceOx4/HkMeRx5LHk8eUx5XHlseXx5jHmceax5vHnAorx53Hnsefx6DHoceix6PHpMelx6bHp8eox6nHqserx6zHrceux6/HsMexx7PHtMe1x7bHt8e4x7nHuse7x7zHvce+x7/IgMiByILIg8iEyIXIhsiHyIjIiciKyIvIjMiNyI7Ij8iQyJHIksiTyJTIlciWyJfImMiZyJrIm8icyJ3InsifCivIoMihyKLIo8ikyKXIpsinyKjIqciqyKvIrMityK7Ir8iwyLHIssizyLTItci2yLfIuMi5yLrIu8i8yL3Ivsi/yYDJgcmQyZHJksmTyZTJlcmWyZfJmMmZyZrJm8mcyZ3JnsmfyaDJocmiyaPJpMmlyabJp8moyanJqsmryazJrcmuya8KK8mwybHJssmzybTJtcm2ybfJuMm5ybrJu8m8yb3Jvsm/yoDKgcqCyoPKhMqFyobKh8qIyonKisqLyozKjcqOyo/KkMqRypLKk8qUypXKlsqXypjKmcqaypvKnMqdyp7Kn8qgyqHKosqjyqTKpcqmyqfKqMqpyqrKq8qsyq3KrsqvzobOiAorzonOis6Mzo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+NCivPjs+Qz5HPks+Tz5TPlc+Wz5fPmM+Zz5rPm8+cz53Pns+fz6DPoc+iz6PPpM+lz6bPp8+oz6nPqs+rz6zPrc+uz6/PsM+xz7LPs8+0z7XPt8+4z7nPus+7z7zPvc++z7/QgNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjNCN0I7Qj9CQ0JEKK9CS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/RkNGR0ZLRkwor0ZTRldGW0ZfRmNGZ0ZrRm9Gc0Z3RntGf0aDRodGi0aPRpNGl0abRp9Go0anRqtGr0azRrdGu0a/RsNGx0bLRs9G00bXRttG30bjRudG60bvRvNG90b7Rv9KA0oHSitKL0ozSjdKO0o/SkNKR0pLSk9KU0pXSltKX0pjSmdKa0pvSnNKdCivSntKf0qDSodKi0qPSpNKl0qbSp9Ko0qnSqtKr0qzSrdKu0q/SsNKx0rLSs9K00rXSttK30rjSudK60rvSvNK90r7Sv9OA04HTgtOD04TThdOG04fTiNOJ04rTi9OM043TjtOQ05HTktOT05TTldOW05fTmNOZ05rTm9Oc053TntOf06AKK9Oh06LTo9Ok06XTptOn06jTqdOq06vTrNOt067Tr9Ow07HTstOz07TTtdO207fTuNO51IDUgdSC1IPUhNSF1IbUh9SI1InUitSL1IzUjdSO1I/UsdSy1LPUtNS11LbUt9S41LnUutS71LzUvdS+1L/VgNWB1YLVg9WE1YXVhtWH1YjViQor1YrVi9WM1Y3VjtWP1ZDVkdWS1ZPVlNWV1ZbVodWi1aPVpNWl1abVp9Wo1anVqtWr1azVrdWu1a/VsNWx1bLVs9W01bXVttW31bjVudW61bvVvNW91b7Vv9aA1oHWgtaD1oTWhdaG1ofhgqDhgqHhgqLhgqPhgqThgqXhgqbhgqfhgqjhgqnhgqrhgqvhgqzhgq0KK+GCruGCr+GCsOGCseGCsuGCs+GCtOGCteGCtuGCt+GCuOGCueGCuuGCu+GCvOGCveGCvuGCv+GDgOGDgeGDguGDg+GDhOGDheG0gOG0geG0guG0g+G0hOG0heG0huG0h+G0iOG0ieG0iuG0i+G0jOG0jeG0juG0j+G0kOG0keG0kuG0k+G0lOG0leG0luG0l+G0mOG0meG0muG0m+G0nOG0neG0nuG0n+G0oOG0oeG0ouG0o+G0pOG0peG0puG0p+G0qOG0qQor4bSq4bSr4bWi4bWj4bWk4bWl4bWm4bWn4bWo4bWp4bWq4bWr4bWs4bWt4bWu4bWv4bWw4bWx4bWy4bWz4bW04bW14bW24bW34bW54bW64bW74bW84bW94bW+4bW/4baA4baB4baC4baD4baE4baF4baG4baH4baI4baJ4baK4baL4baM4baN4baO4baP4baQ4baR4baS4baT4baU4baV4baW4baX4baY4baZ4baa4biA4biB4biC4biD4biE4biF4biG4biHCivhuIjhuInhuIrhuIvhuIzhuI3huI7huI/huJDhuJHhuJLhuJPhuJThuJXhuJbhuJfhuJjhuJnhuJrhuJvhuJzhuJ3huJ7huJ/huKDhuKHhuKLhuKPhuKThuKXhuKbhuKfhuKjhuKnhuKrhuKvhuKzhuK3huK7huK/huLDhuLHhuLLhuLPhuLThuLXhuLbhuLfhuLjhuLnhuLrhuLvhuLzhuL3huL7huL/huYDhuYHhuYLhuYPhuYThuYXhuYbhuYfhuYjhuYkKK+G5iuG5i+G5jOG5jeG5juG5j+G5kOG5keG5kuG5k+G5lOG5leG5luG5l+G5mOG5meG5muG5m+G5nOG5neG5nuG5n+G5oOG5oeG5ouG5o+G5pOG5peG5puG5p+G5qOG5qeG5quG5q+G5rOG5reG5ruG5r+G5sOG5seG5suG5s+G5tOG5teG5tuG5t+G5uOG5ueG5uuG5u+G5vOG5veG5vuG5v+G6gOG6geG6guG6g+G6hOG6heG6huG6h+G6iOG6ieG6iuG6iwor4bqM4bqN4bqO4bqP4bqQ4bqR4bqS4bqT4bqU4bqV4bqW4bqX4bqY4bqZ4bqa4bqb4bqg4bqh4bqi4bqj4bqk4bql4bqm4bqn4bqo4bqp4bqq4bqr4bqs4bqt4bqu4bqv4bqw4bqx4bqy4bqz4bq04bq14bq24bq34bq44bq54bq64bq74bq84bq94bq+4bq/4buA4buB4buC4buD4buE4buF4buG4buH4buI4buJ4buK4buL4buM4buN4buO4buP4buQ4buRCivhu5Lhu5Phu5Thu5Xhu5bhu5fhu5jhu5nhu5rhu5vhu5zhu53hu57hu5/hu6Dhu6Hhu6Lhu6Phu6Thu6Xhu6bhu6fhu6jhu6nhu6rhu6vhu6zhu63hu67hu6/hu7Dhu7Hhu7Lhu7Phu7Thu7Xhu7bhu7fhu7jhu7nhvIDhvIHhvILhvIPhvIThvIXhvIbhvIfhvIjhvInhvIrhvIvhvIzhvI3hvI7hvI/hvJDhvJHhvJLhvJPhvJThvJXhvJjhvJnhvJrhvJsKK+G8nOG8neG8oOG8oeG8ouG8o+G8pOG8peG8puG8p+G8qOG8qeG8quG8q+G8rOG8reG8ruG8r+G8sOG8seG8suG8s+G8tOG8teG8tuG8t+G8uOG8ueG8uuG8u+G8vOG8veG8vuG8v+G9gOG9geG9guG9g+G9hOG9heG9iOG9ieG9iuG9i+G9jOG9jeG9kOG9keG9kuG9k+G9lOG9leG9luG9l+G9meG9m+G9neG9n+G9oOG9oeG9ouG9o+G9pOG9peG9puG9pwor4b2o4b2p4b2q4b2r4b2s4b2t4b2u4b2v4b2w4b2x4b2y4b2z4b204b214b224b234b244b254b264b274b284b294b6A4b6B4b6C4b6D4b6E4b6F4b6G4b6H4b6Q4b6R4b6S4b6T4b6U4b6V4b6W4b6X4b6g4b6h4b6i4b6j4b6k4b6l4b6m4b6n4b6w4b6x4b6y4b6z4b604b624b634b644b654b664b674b6+4b+C4b+D4b+E4b+G4b+H4b+I4b+J4b+KCivhv4vhv5Dhv5Hhv5Lhv5Phv5bhv5fhv5jhv5nhv5rhv5vhv6Dhv6Hhv6Lhv6Phv6Thv6Xhv6bhv6fhv6jhv6nhv6rhv6vhv6zhv7Lhv7Phv7Thv7bhv7fhv7jhv7nhv7rhv7vigbHigb/ihILihIfihIrihIvihIzihI3ihI7ihI/ihJDihJHihJLihJPihJXihJnihJrihJvihJzihJ3ihKTihKbihKjihKrihKvihKzihK3ihK/ihLDihLHihLPihLTihLkKK0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXrCqsK1wrrDgMOBw4LDg8OEw4XDhsOHw4jDicOKCivDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO4w7nDusO7w7zDvcO+w7/EgMSBxILEg8SExIXEhsSHxIjEicSKxIvEjMSNxI4KK8SPxJDEkcSSxJPElMSVxJbEl8SYxJnEmsSbxJzEncSexJ/EoMShxKLEo8SkxKXEpsSnxKjEqcSqxKvErMStxK7Er8SwxLHEssSzxLTEtcS2xLfEuMS5xLrEu8S8xL3EvsS/xYDFgcWCxYPFhMWFxYbFh8WIxYnFisWLxYzFjcWOxY/FkAorxZHFksWTxZTFlcWWxZfFmMWZxZrFm8WcxZ3FnsWfxaDFocWixaPFpMWlxabFp8WoxanFqsWrxazFrcWuxa/FsMWxxbLFs8W0xbXFtsW3xbjFucW6xbvFvMW9xb7Fv8aAxoHGgsaDxoTGhcaGxofGiMaJxorGi8aMxo3GjsaPxpDGkcaSCivGk8aUxpXGlsaXxpjGmcaaxpvGnMadxp7Gn8agxqHGosajxqTGpcamxqfGqMapxqrGq8asxq3GrsavxrDGscayxrPGtMa1xrbGt8a4xrnGusa8xr3Gvsa/x4THhseHx4nHiseMx43HjsePx5DHkceSx5PHlMeVx5bHl8eYx5nHmsebx5wKK8edx57Hn8egx6HHosejx6THpcemx6fHqMepx6rHq8esx63Hrsevx7DHscezx7THtce2x7fHuMe5x7rHu8e8x73Hvse/yIDIgciCyIPIhMiFyIbIh8iIyInIisiLyIzIjciOyI/IkMiRyJLIk8iUyJXIlsiXyJjImciayJvInMidyJ7InworyKDIociiyKPIpMilyKbIp8ioyKnIqsiryKzIrciuyK/IsMixyLLIs8i0yLXItsi3yLjIuci6yLvIvMi9yL7Iv8mAyYHJkMmRyZLJk8mUyZXJlsmXyZjJmcmayZvJnMmdyZ7Jn8mgyaHJosmjyaTJpcmmyafJqMmpyarJq8msya3JrsmvCivJsMmxybLJs8m0ybXJtsm3ybjJucm6ybvJvMm9yb7Jv8qAyoHKgsqDyoTKhcqGyofKiMqJyorKi8qMyo3KjsqPypDKkcqSypPKlMqVypbKl8qYypnKmsqbypzKncqeyp/KoMqhyqLKo8qkyqXKpsqnyqjKqcqqyqvKrMqtyq7Kr86GzogKK86JzorOjM6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjQorz47PkM+Rz5LPk8+Uz5XPls+Xz5jPmc+az5vPnM+dz57Pn8+gz6HPos+jz6TPpc+mz6fPqM+pz6rPq8+sz63Prs+vz7DPsc+yz7PPtM+1z7fPuM+5z7rPu8+8z73Pvs+/0IDQgdCC0IPQhNCF0IbQh9CI0InQitCL0IzQjdCO0I/QkNCRCivQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0ZDRkdGS0ZMKK9GU0ZXRltGX0ZjRmdGa0ZvRnNGd0Z7Rn9Gg0aHRotGj0aTRpdGm0afRqNGp0arRq9Gs0a3RrtGv0bDRsdGy0bPRtNG10bbRt9G40bnRutG70bzRvdG+0b/SgNKB0orSi9KM0o3SjtKP0pDSkdKS0pPSlNKV0pbSl9KY0pnSmtKb0pzSnQor0p7Sn9Kg0qHSotKj0qTSpdKm0qfSqNKp0qrSq9Ks0q3SrtKv0rDSsdKy0rPStNK10rbSt9K40rnSutK70rzSvdK+0r/TgNOB04LTg9OE04XThtOH04jTidOK04vTjNON047TkNOR05LTk9OU05XTltOX05jTmdOa05vTnNOd057Tn9OgCivTodOi06PTpNOl06bTp9Oo06nTqtOr06zTrdOu06/TsNOx07LTs9O007XTttO307jTudSA1IHUgtSD1ITUhdSG1IfUiNSJ1IrUi9SM1I3UjtSP1LHUstSz1LTUtdS21LfUuNS51LrUu9S81L3UvtS/1YDVgdWC1YPVhNWF1YbVh9WI1YkKK9WK1YvVjNWN1Y7Vj9WQ1ZHVktWT1ZTVldWW1aHVotWj1aTVpdWm1afVqNWp1arVq9Ws1a3VrtWv1bDVsdWy1bPVtNW11bbVt9W41bnVutW71bzVvdW+1b/WgNaB1oLWg9aE1oXWhtaH4YKg4YKh4YKi4YKj4YKk4YKl4YKm4YKn4YKo4YKp4YKq4YKr4YKs4YKtCivhgq7hgq/hgrDhgrHhgrLhgrPhgrThgrXhgrbhgrfhgrjhgrnhgrrhgrvhgrzhgr3hgr7hgr/hg4Dhg4Hhg4Lhg4Phg4Thg4XhtIDhtIHhtILhtIPhtIThtIXhtIbhtIfhtIjhtInhtIrhtIvhtIzhtI3htI7htI/htJDhtJHhtJLhtJPhtJThtJXhtJbhtJfhtJjhtJnhtJrhtJvhtJzhtJ3htJ7htJ/htKDhtKHhtKLhtKPhtKThtKXhtKbhtKfhtKjhtKkKK+G0quG0q+G1ouG1o+G1pOG1peG1puG1p+G1qOG1qeG1quG1q+G1rOG1reG1ruG1r+G1sOG1seG1suG1s+G1tOG1teG1tuG1t+G1ueG1uuG1u+G1vOG1veG1vuG1v+G2gOG2geG2guG2g+G2hOG2heG2huG2h+G2iOG2ieG2iuG2i+G2jOG2jeG2juG2j+G2kOG2keG2kuG2k+G2lOG2leG2luG2l+G2mOG2meG2muG4gOG4geG4guG4g+G4hOG4heG4huG4hwor4biI4biJ4biK4biL4biM4biN4biO4biP4biQ4biR4biS4biT4biU4biV4biW4biX4biY4biZ4bia4bib4bic4bid4bie4bif4big4bih4bii4bij4bik4bil4bim4bin4bio4bip4biq4bir4bis4bit4biu4biv4biw4bix4biy4biz4bi04bi14bi24bi34bi44bi54bi64bi74bi84bi94bi+4bi/4bmA4bmB4bmC4bmD4bmE4bmF4bmG4bmH4bmI4bmJCivhuYrhuYvhuYzhuY3huY7huY/huZDhuZHhuZLhuZPhuZThuZXhuZbhuZfhuZjhuZnhuZrhuZvhuZzhuZ3huZ7huZ/huaDhuaHhuaLhuaPhuaThuaXhuabhuafhuajhuanhuarhuavhuazhua3hua7hua/hubDhubHhubLhubPhubThubXhubbhubfhubjhubnhubrhubvhubzhub3hub7hub/huoDhuoHhuoLhuoPhuoThuoXhuobhuofhuojhuonhuorhuosKK+G6jOG6jeG6juG6j+G6kOG6keG6kuG6k+G6lOG6leG6luG6l+G6mOG6meG6muG6m+G6oOG6oeG6ouG6o+G6pOG6peG6puG6p+G6qOG6qeG6quG6q+G6rOG6reG6ruG6r+G6sOG6seG6suG6s+G6tOG6teG6tuG6t+G6uOG6ueG6uuG6u+G6vOG6veG6vuG6v+G7gOG7geG7guG7g+G7hOG7heG7huG7h+G7iOG7ieG7iuG7i+G7jOG7jeG7juG7j+G7kOG7kQor4buS4buT4buU4buV4buW4buX4buY4buZ4bua4bub4buc4bud4bue4buf4bug4buh4bui4buj4buk4bul4bum4bun4buo4bup4buq4bur4bus4but4buu4buv4buw4bux4buy4buz4bu04bu14bu24bu34bu44bu54byA4byB4byC4byD4byE4byF4byG4byH4byI4byJ4byK4byL4byM4byN4byO4byP4byQ4byR4byS4byT4byU4byV4byY4byZ4bya4bybCivhvJzhvJ3hvKDhvKHhvKLhvKPhvKThvKXhvKbhvKfhvKjhvKnhvKrhvKvhvKzhvK3hvK7hvK/hvLDhvLHhvLLhvLPhvLThvLXhvLbhvLfhvLjhvLnhvLrhvLvhvLzhvL3hvL7hvL/hvYDhvYHhvYLhvYPhvYThvYXhvYjhvYnhvYrhvYvhvYzhvY3hvZDhvZHhvZLhvZPhvZThvZXhvZbhvZfhvZnhvZvhvZ3hvZ/hvaDhvaHhvaLhvaPhvaThvaXhvabhvacKK+G9qOG9qeG9quG9q+G9rOG9reG9ruG9r+G9sOG9seG9suG9s+G9tOG9teG9tuG9t+G9uOG9ueG9uuG9u+G9vOG9veG+gOG+geG+guG+g+G+hOG+heG+huG+h+G+kOG+keG+kuG+k+G+lOG+leG+luG+l+G+oOG+oeG+ouG+o+G+pOG+peG+puG+p+G+sOG+seG+suG+s+G+tOG+tuG+t+G+uOG+ueG+uuG+u+G+vuG/guG/g+G/hOG/huG/h+G/iOG/ieG/igor4b+L4b+Q4b+R4b+S4b+T4b+W4b+X4b+Y4b+Z4b+a4b+b4b+g4b+h4b+i4b+j4b+k4b+l4b+m4b+n4b+o4b+p4b+q4b+r4b+s4b+y4b+z4b+04b+24b+34b+44b+54b+64b+74oGx4oG/4oSC4oSH4oSK4oSL4oSM4oSN4oSO4oSP4oSQ4oSR4oSS4oST4oSV4oSZ4oSa4oSb4oSc4oSd4oSk4oSm4oSo4oSq4oSr4oSs4oSt4oSv4oSw4oSx4oSz4oS04oS5CitBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6wqrCtcK6w4DDgcOCw4PDhMOFw4bDh8OIw4nDigorw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O8w73DvsO/xIDEgcSCxIPEhMSFxIbEh8SIxInEisSLxIzEjcSOCivEj8SQxJHEksSTxJTElcSWxJfEmMSZxJrEm8ScxJ3EnsSfxKDEocSixKPEpMSlxKbEp8SoxKnEqsSrxKzErcSuxK/EsMSxxLLEs8S0xLXEtsS3xLjEucS6xLvEvMS9xL7Ev8WAxYHFgsWDxYTFhcWGxYfFiMWJxYrFi8WMxY3FjsWPxZAKK8WRxZLFk8WUxZXFlsWXxZjFmcWaxZvFnMWdxZ7Fn8WgxaHFosWjxaTFpcWmxafFqMWpxarFq8Wsxa3FrsWvxbDFscWyxbPFtMW1xbbFt8W4xbnFusW7xbzFvcW+xb/GgMaBxoLGg8aExoXGhsaHxojGicaKxovGjMaNxo7Gj8aQxpHGkgorxpPGlMaVxpbGl8aYxpnGmsabxpzGncaexp/GoMahxqLGo8akxqXGpsanxqjGqcaqxqvGrMatxq7Gr8awxrHGssazxrTGtca2xrfGuMa5xrrGvMa9xr7Gv8eEx4bHh8eJx4rHjMeNx47Hj8eQx5HHkseTx5THlceWx5fHmMeZx5rHm8ecCivHnceex5/HoMehx6LHo8ekx6XHpsenx6jHqceqx6vHrMetx67Hr8ewx7HHs8e0x7XHtse3x7jHuce6x7vHvMe9x77Hv8iAyIHIgsiDyITIhciGyIfIiMiJyIrIi8iMyI3IjsiPyJDIkciSyJPIlMiVyJbIl8iYyJnImsibyJzIncieyJ8KK8igyKHIosijyKTIpcimyKfIqMipyKrIq8isyK3IrsivyLDIsciyyLPItMi1yLbIt8i4yLnIusi7yLzIvci+yL/JgMmByZDJkcmSyZPJlMmVyZbJl8mYyZnJmsmbyZzJncmeyZ/JoMmhyaLJo8mkyaXJpsmnyajJqcmqyavJrMmtya7JrworybDJscmyybPJtMm1ybbJt8m4ybnJusm7ybzJvcm+yb/KgMqByoLKg8qEyoXKhsqHyojKicqKyovKjMqNyo7Kj8qQypHKksqTypTKlcqWypfKmMqZyprKm8qcyp3KnsqfyqDKocqiyqPKpMqlyqbKp8qoyqnKqsqryqzKrcquyq/Ohs6ICivOic6KzozOjs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz40KK8+Oz5DPkc+Sz5PPlM+Vz5bPl8+Yz5nPms+bz5zPnc+ez5/PoM+hz6LPo8+kz6XPps+nz6jPqc+qz6vPrM+tz67Pr8+wz7HPss+zz7TPtc+3z7jPuc+6z7vPvM+9z77Pv9CA0IHQgtCD0ITQhdCG0IfQiNCJ0IrQi9CM0I3QjtCP0JDQkQor0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9GQ0ZHRktGTCivRlNGV0ZbRl9GY0ZnRmtGb0ZzRndGe0Z/RoNGh0aLRo9Gk0aXRptGn0ajRqdGq0avRrNGt0a7Rr9Gw0bHRstGz0bTRtdG20bfRuNG50brRu9G80b3RvtG/0oDSgdKK0ovSjNKN0o7Sj9KQ0pHSktKT0pTSldKW0pfSmNKZ0prSm9Kc0p0KK9Ke0p/SoNKh0qLSo9Kk0qXSptKn0qjSqdKq0qvSrNKt0q7Sr9Kw0rHSstKz0rTStdK20rfSuNK50rrSu9K80r3SvtK/04DTgdOC04PThNOF04bTh9OI04nTitOL04zTjdOO05DTkdOS05PTlNOV05bTl9OY05nTmtOb05zTndOe05/ToAor06HTotOj06TTpdOm06fTqNOp06rTq9Os063TrtOv07DTsdOy07PTtNO107bTt9O407nUgNSB1ILUg9SE1IXUhtSH1IjUidSK1IvUjNSN1I7Uj9Sx1LLUs9S01LXUttS31LjUudS61LvUvNS91L7Uv9WA1YHVgtWD1YTVhdWG1YfViNWJCivVitWL1YzVjdWO1Y/VkNWR1ZLVk9WU1ZXVltWh1aLVo9Wk1aXVptWn1ajVqdWq1avVrNWt1a7Vr9Ww1bHVstWz1bTVtdW21bfVuNW51brVu9W81b3VvtW/1oDWgdaC1oPWhNaF1obWh+GCoOGCoeGCouGCo+GCpOGCpeGCpuGCp+GCqOGCqeGCquGCq+GCrOGCrQor4YKu4YKv4YKw4YKx4YKy4YKz4YK04YK14YK24YK34YK44YK54YK64YK74YK84YK94YK+4YK/4YOA4YOB4YOC4YOD4YOE4YOF4bSA4bSB4bSC4bSD4bSE4bSF4bSG4bSH4bSI4bSJ4bSK4bSL4bSM4bSN4bSO4bSP4bSQ4bSR4bSS4bST4bSU4bSV4bSW4bSX4bSY4bSZ4bSa4bSb4bSc4bSd4bSe4bSf4bSg4bSh4bSi4bSj4bSk4bSl4bSm4bSn4bSo4bSpCivhtKrhtKvhtaLhtaPhtaThtaXhtabhtafhtajhtanhtarhtavhtazhta3hta7hta/htbDhtbHhtbLhtbPhtbThtbXhtbbhtbfhtbnhtbrhtbvhtbzhtb3htb7htb/htoDhtoHhtoLhtoPhtoThtoXhtobhtofhtojhtonhtorhtovhtozhto3hto7hto/htpDhtpHhtpLhtpPhtpThtpXhtpbhtpfhtpjhtpnhtprhuIDhuIHhuILhuIPhuIThuIXhuIbhuIcKK+G4iOG4ieG4iuG4i+G4jOG4jeG4juG4j+G4kOG4keG4kuG4k+G4lOG4leG4luG4l+G4mOG4meG4muG4m+G4nOG4neG4nuG4n+G4oOG4oeG4ouG4o+G4pOG4peG4puG4p+G4qOG4qeG4quG4q+G4rOG4reG4ruG4r+G4sOG4seG4suG4s+G4tOG4teG4tuG4t+G4uOG4ueG4uuG4u+G4vOG4veG4vuG4v+G5gOG5geG5guG5g+G5hOG5heG5huG5h+G5iOG5iQor4bmK4bmL4bmM4bmN4bmO4bmP4bmQ4bmR4bmS4bmT4bmU4bmV4bmW4bmX4bmY4bmZ4bma4bmb4bmc4bmd4bme4bmf4bmg4bmh4bmi4bmj4bmk4bml4bmm4bmn4bmo4bmp4bmq4bmr4bms4bmt4bmu4bmv4bmw4bmx4bmy4bmz4bm04bm14bm24bm34bm44bm54bm64bm74bm84bm94bm+4bm/4bqA4bqB4bqC4bqD4bqE4bqF4bqG4bqH4bqI4bqJ4bqK4bqLCivhuozhuo3huo7huo/hupDhupHhupLhupPhupThupXhupbhupfhupjhupnhuprhupvhuqDhuqHhuqLhuqPhuqThuqXhuqbhuqfhuqjhuqnhuqrhuqvhuqzhuq3huq7huq/hurDhurHhurLhurPhurThurXhurbhurfhurjhurnhurrhurvhurzhur3hur7hur/hu4Dhu4Hhu4Lhu4Phu4Thu4Xhu4bhu4fhu4jhu4nhu4rhu4vhu4zhu43hu47hu4/hu5Dhu5EKK+G7kuG7k+G7lOG7leG7luG7l+G7mOG7meG7muG7m+G7nOG7neG7nuG7n+G7oOG7oeG7ouG7o+G7pOG7peG7puG7p+G7qOG7qeG7quG7q+G7rOG7reG7ruG7r+G7sOG7seG7suG7s+G7tOG7teG7tuG7t+G7uOG7ueG8gOG8geG8guG8g+G8hOG8heG8huG8h+G8iOG8ieG8iuG8i+G8jOG8jeG8juG8j+G8kOG8keG8kuG8k+G8lOG8leG8mOG8meG8muG8mwor4byc4byd4byg4byh4byi4byj4byk4byl4bym4byn4byo4byp4byq4byr4bys4byt4byu4byv4byw4byx4byy4byz4by04by14by24by34by44by54by64by74by84by94by+4by/4b2A4b2B4b2C4b2D4b2E4b2F4b2I4b2J4b2K4b2L4b2M4b2N4b2Q4b2R4b2S4b2T4b2U4b2V4b2W4b2X4b2Z4b2b4b2d4b2f4b2g4b2h4b2i4b2j4b2k4b2l4b2m4b2nCivhvajhvanhvarhvavhvazhva3hva7hva/hvbDhvbHhvbLhvbPhvbThvbXhvbbhvbfhvbjhvbnhvbrhvbvhvbzhvb3hvoDhvoHhvoLhvoPhvoThvoXhvobhvofhvpDhvpHhvpLhvpPhvpThvpXhvpbhvpfhvqDhvqHhvqLhvqPhvqThvqXhvqbhvqfhvrDhvrHhvrLhvrPhvrThvrbhvrfhvrjhvrnhvrrhvrvhvr7hv4Lhv4Phv4Thv4bhv4fhv4jhv4nhv4oKK+G/i+G/kOG/keG/kuG/k+G/luG/l+G/mOG/meG/muG/m+G/oOG/oeG/ouG/o+G/pOG/peG/puG/p+G/qOG/qeG/quG/q+G/rOG/suG/s+G/tOG/tuG/t+G/uOG/ueG/uuG/u+KBseKBv+KEguKEh+KEiuKEi+KEjOKEjeKEjuKEj+KEkOKEkeKEkuKEk+KEleKEmeKEmuKEm+KEnOKEneKEpOKEpuKEqOKEquKEq+KErOKEreKEr+KEsOKEseKEs+KEtOKEuQorQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esKqwrXCusOAw4HDgsODw4TDhcOGw4fDiMOJw4oKK8OLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7jDucO6w7vDvMO9w77Dv8SAxIHEgsSDxITEhcSGxIfEiMSJxIrEi8SMxI3EjgorxI/EkMSRxJLEk8SUxJXElsSXxJjEmcSaxJvEnMSdxJ7En8SgxKHEosSjxKTEpcSmxKfEqMSpxKrEq8SsxK3ErsSvxLDEscSyxLPEtMS1xLbEt8S4xLnEusS7xLzEvcS+xL/FgMWBxYLFg8WExYXFhsWHxYjFicWKxYvFjMWNxY7Fj8WQCivFkcWSxZPFlMWVxZbFl8WYxZnFmsWbxZzFncWexZ/FoMWhxaLFo8WkxaXFpsWnxajFqcWqxavFrMWtxa7Fr8WwxbHFssWzxbTFtcW2xbfFuMW5xbrFu8W8xb3FvsW/xoDGgcaCxoPGhMaFxobGh8aIxonGisaLxozGjcaOxo/GkMaRxpIKK8aTxpTGlcaWxpfGmMaZxprGm8acxp3GnsafxqDGocaixqPGpMalxqbGp8aoxqnGqsarxqzGrcauxq/GsMaxxrLGs8a0xrXGtsa3xrjGuca6xrzGvca+xr/HhMeGx4fHiceKx4zHjceOx4/HkMeRx5LHk8eUx5XHlseXx5jHmceax5vHnAorx53Hnsefx6DHoceix6PHpMelx6bHp8eox6nHqserx6zHrceux6/HsMexx7PHtMe1x7bHt8e4x7nHuse7x7zHvce+x7/IgMiByILIg8iEyIXIhsiHyIjIiciKyIvIjMiNyI7Ij8iQyJHIksiTyJTIlciWyJfImMiZyJrIm8icyJ3InsifCivIoMihyKLIo8ikyKXIpsinyKjIqciqyKvIrMityK7Ir8iwyLHIssizyLTItci2yLfIuMi5yLrIu8i8yL3Ivsi/yYDJgcmQyZHJksmTyZTJlcmWyZfJmMmZyZrJm8mcyZ3JnsmfyaDJocmiyaPJpMmlyabJp8moyanJqsmryazJrcmuya8KK8mwybHJssmzybTJtcm2ybfJuMm5ybrJu8m8yb3Jvsm/yoDKgcqCyoPKhMqFyobKh8qIyonKisqLyozKjcqOyo/KkMqRypLKk8qUypXKlsqXypjKmcqaypvKnMqdyp7Kn8qgyqHKosqjyqTKpcqmyqfKqMqpyqrKq8qsyq3KrsqvzobOiAorzonOis6Mzo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+NCivPjs+Qz5HPks+Tz5TPlc+Wz5fPmM+Zz5rPm8+cz53Pns+fz6DPoc+iz6PPpM+lz6bPp8+oz6nPqs+rz6zPrc+uz6/PsM+xz7LPs8+0z7XPt8+4z7nPus+7z7zPvc++z7/QgNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjNCN0I7Qj9CQ0JEKK9CS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/RkNGR0ZLRkwor0ZTRldGW0ZfRmNGZ0ZrRm9Gc0Z3RntGf0aDRodGi0aPRpNGl0abRp9Go0anRqtGr0azRrdGu0a/RsNGx0bLRs9G00bXRttG30bjRudG60bvRvNG90b7Rv9KA0oHSitKL0ozSjdKO0o/SkNKR0pLSk9KU0pXSltKX0pjSmdKa0pvSnNKdCivSntKf0qDSodKi0qPSpNKl0qbSp9Ko0qnSqtKr0qzSrdKu0q/SsNKx0rLSs9K00rXSttK30rjSudK60rvSvNK90r7Sv9OA04HTgtOD04TThdOG04fTiNOJ04rTi9OM043TjtOQ05HTktOT05TTldOW05fTmNOZ05rTm9Oc053TntOf06AKK9Oh06LTo9Ok06XTptOn06jTqdOq06vTrNOt067Tr9Ow07HTstOz07TTtdO207fTuNO51IDUgdSC1IPUhNSF1IbUh9SI1InUitSL1IzUjdSO1I/UsdSy1LPUtNS11LbUt9S41LnUutS71LzUvdS+1L/VgNWB1YLVg9WE1YXVhtWH1YjViQor1YrVi9WM1Y3VjtWP1ZDVkdWS1ZPVlNWV1ZbVodWi1aPVpNWl1abVp9Wo1anVqtWr1azVrdWu1a/VsNWx1bLVs9W01bXVttW31bjVudW61bvVvNW91b7Vv9aA1oHWgtaD1oTWhdaG1ofhgqDhgqHhgqLhgqPhgqThgqXhgqbhgqfhgqjhgqnhgqrhgqvhgqzhgq0KK+GCruGCr+GCsOGCseGCsuGCs+GCtOGCteGCtuGCt+GCuOGCueGCuuGCu+GCvOGCveGCvuGCv+GDgOGDgeGDguGDg+GDhOGDheG0gOG0geG0guG0g+G0hOG0heG0huG0h+G0iOG0ieG0iuG0i+G0jOG0jeG0juG0j+G0kOG0keG0kuG0k+G0lOG0leG0luG0l+G0mOG0meG0muG0m+G0nOG0neG0nuG0n+G0oOG0oeG0ouG0o+G0pOG0peG0puG0p+G0qOG0qQor4bSq4bSr4bWi4bWj4bWk4bWl4bWm4bWn4bWo4bWp4bWq4bWr4bWs4bWt4bWu4bWv4bWw4bWx4bWy4bWz4bW04bW14bW24bW34bW54bW64bW74bW84bW94bW+4bW/4baA4baB4baC4baD4baE4baF4baG4baH4baI4baJ4baK4baL4baM4baN4baO4baP4baQ4baR4baS4baT4baU4baV4baW4baX4baY4baZ4baa4biA4biB4biC4biD4biE4biF4biG4biHCivhuIjhuInhuIrhuIvhuIzhuI3huI7huI/huJDhuJHhuJLhuJPhuJThuJXhuJbhuJfhuJjhuJnhuJrhuJvhuJzhuJ3huJ7huJ/huKDhuKHhuKLhuKPhuKThuKXhuKbhuKfhuKjhuKnhuKrhuKvhuKzhuK3huK7huK/huLDhuLHhuLLhuLPhuLThuLXhuLbhuLfhuLjhuLnhuLrhuLvhuLzhuL3huL7huL/huYDhuYHhuYLhuYPhuYThuYXhuYbhuYfhuYjhuYkKK+G5iuG5i+G5jOG5jeG5juG5j+G5kOG5keG5kuG5k+G5lOG5leG5luG5l+G5mOG5meG5muG5m+G5nOG5neG5nuG5n+G5oOG5oeG5ouG5o+G5pOG5peG5puG5p+G5qOG5qeG5quG5q+G5rOG5reG5ruG5r+G5sOG5seG5suG5s+G5tOG5teG5tuG5t+G5uOG5ueG5uuG5u+G5vOG5veG5vuG5v+G6gOG6geG6guG6g+G6hOG6heG6huG6h+G6iOG6ieG6iuG6iwor4bqM4bqN4bqO4bqP4bqQ4bqR4bqS4bqT4bqU4bqV4bqW4bqX4bqY4bqZ4bqa4bqb4bqg4bqh4bqi4bqj4bqk4bql4bqm4bqn4bqo4bqp4bqq4bqr4bqs4bqt4bqu4bqv4bqw4bqx4bqy4bqz4bq04bq14bq24bq34bq44bq54bq64bq74bq84bq94bq+4bq/4buA4buB4buC4buD4buE4buF4buG4buH4buI4buJ4buK4buL4buM4buN4buO4buP4buQ4buRCivhu5Lhu5Phu5Thu5Xhu5bhu5fhu5jhu5nhu5rhu5vhu5zhu53hu57hu5/hu6Dhu6Hhu6Lhu6Phu6Thu6Xhu6bhu6fhu6jhu6nhu6rhu6vhu6zhu63hu67hu6/hu7Dhu7Hhu7Lhu7Phu7Thu7Xhu7bhu7fhu7jhu7nhvIDhvIHhvILhvIPhvIThvIXhvIbhvIfhvIjhvInhvIrhvIvhvIzhvI3hvI7hvI/hvJDhvJHhvJLhvJPhvJThvJXhvJjhvJnhvJrhvJsKK+G8nOG8neG8oOG8oeG8ouG8o+G8pOG8peG8puG8p+G8qOG8qeG8quG8q+G8rOG8reG8ruG8r+G8sOG8seG8suG8s+G8tOG8teG8tuG8t+G8uOG8ueG8uuG8u+G8vOG8veG8vuG8v+G9gOG9geG9guG9g+G9hOG9heG9iOG9ieG9iuG9i+G9jOG9jeG9kOG9keG9kuG9k+G9lOG9leG9luG9l+G9meG9m+G9neG9n+G9oOG9oeG9ouG9o+G9pOG9peG9puG9pwor4b2o4b2p4b2q4b2r4b2s4b2t4b2u4b2v4b2w4b2x4b2y4b2z4b204b214b224b234b244b254b264b274b284b294b6A4b6B4b6C4b6D4b6E4b6F4b6G4b6H4b6Q4b6R4b6S4b6T4b6U4b6V4b6W4b6X4b6g4b6h4b6i4b6j4b6k4b6l4b6m4b6n4b6w4b6x4b6y4b6z4b604b624b634b644b654b664b674b6+4b+C4b+D4b+E4b+G4b+H4b+I4b+J4b+KCivhv4vhv5Dhv5Hhv5Lhv5Phv5bhv5fhv5jhv5nhv5rhv5vhv6Dhv6Hhv6Lhv6Phv6Thv6Xhv6bhv6fhv6jhv6nhv6rhv6vhv6zhv7Lhv7Phv7Thv7bhv7fhv7jhv7nhv7rhv7vigbHigb/ihILihIfihIrihIvihIzihI3ihI7ihI/ihJDihJHihJLihJPihJXihJnihJrihJvihJzihJ3ihKTihKbihKjihKrihKvihKzihK3ihK/ihLDihLHihLPihLTihLkKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbWFwcGluZy5zb3J0IGIvdGVzdHMvZGF0YS9tYXBwaW5nLnNvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYmExYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvbWFwcGluZy5zb3J0CkBAIC0wLDAgKzEsNiBAQAorejogMQorYTogMgoreTogMworYjogNAoreDogNQorYzogNgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9tYXBwaW5nLnNvcnRlZCBiL3Rlc3RzL2RhdGEvbWFwcGluZy5zb3J0ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkZDM0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvbWFwcGluZy5zb3J0ZWQKQEAgLTAsMCArMSw2IEBACithOiAyCitiOiA0CitjOiA2Cit4OiA1Cit5OiAzCit6OiAxCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL21hcHBpbmdzLmV2ZW50cyBiL3Rlc3RzL2RhdGEvbWFwcGluZ3MuZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYjU1NzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL21hcHBpbmdzLmV2ZW50cwpAQCAtMCwwICsxLDQ0IEBACistICFTdHJlYW1TdGFydAorCistICFEb2N1bWVudFN0YXJ0CistICFNYXBwaW5nU3RhcnQKKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSwgdmFsdWU6ICdrZXknIH0KKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSwgdmFsdWU6ICd2YWx1ZScgfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2VtcHR5IG1hcHBpbmcnIH0KKy0gIU1hcHBpbmdTdGFydAorLSAhTWFwcGluZ0VuZAorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2VtcHR5IG1hcHBpbmcgd2l0aCB0YWcnIH0KKy0gIU1hcHBpbmdTdGFydCB7IHRhZzogJyFteXRhZycsIGltcGxpY2l0OiBmYWxzZSB9CistICFNYXBwaW5nRW5kCistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAnYmxvY2sgbWFwcGluZycgfQorLSAhTWFwcGluZ1N0YXJ0CistICFNYXBwaW5nU3RhcnQKKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSwgdmFsdWU6ICdjb21wbGV4JyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAna2V5JyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAnY29tcGxleCcgfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2tleScgfQorLSAhTWFwcGluZ0VuZAorLSAhTWFwcGluZ1N0YXJ0CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAnY29tcGxleCcgfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2tleScgfQorLSAhTWFwcGluZ0VuZAorLSAhTWFwcGluZ0VuZAorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2Zsb3cgbWFwcGluZycgfQorLSAhTWFwcGluZ1N0YXJ0IHsgZmxvd19zdHlsZTogdHJ1ZSB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAna2V5JyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAndmFsdWUnIH0KKy0gIU1hcHBpbmdTdGFydAorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2NvbXBsZXgnIH0KKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSwgdmFsdWU6ICdrZXknIH0KKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSwgdmFsdWU6ICdjb21wbGV4JyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAna2V5JyB9CistICFNYXBwaW5nRW5kCistICFNYXBwaW5nU3RhcnQKKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSwgdmFsdWU6ICdjb21wbGV4JyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAna2V5JyB9CistICFNYXBwaW5nRW5kCistICFNYXBwaW5nRW5kCistICFNYXBwaW5nRW5kCistICFEb2N1bWVudEVuZAorCistICFTdHJlYW1FbmQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbWVyZ2UuZGF0YSBiL3Rlc3RzL2RhdGEvbWVyZ2UuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU1YmJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9tZXJnZS5kYXRhCkBAIC0wLDAgKzEgQEAKKy0gPDwKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbWVyZ2UuZGV0ZWN0IGIvdGVzdHMvZGF0YS9tZXJnZS5kZXRlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3MmQwZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvbWVyZ2UuZGV0ZWN0CkBAIC0wLDAgKzEgQEAKK3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL21vcmUtZmxvYXRzLmNvZGUgYi90ZXN0cy9kYXRhL21vcmUtZmxvYXRzLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlNDQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvbW9yZS1mbG9hdHMuY29kZQpAQCAtMCwwICsxIEBACitbMC4wLCArMS4wLCAtMS4wLCArMWUzMDAwMDAsIC0xZTMwMDAwMCwgMWUzMDAwMDAvMWUzMDAwMDAsIC0oMWUzMDAwMDAvMWUzMDAwMDApXSAjIGxhc3QgdHdvIGl0ZW1zIGFyZSBpbmQgYW5kIHFuYW4gcmVzcGVjdGl2ZWx5LgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9tb3JlLWZsb2F0cy5kYXRhIGIvdGVzdHMvZGF0YS9tb3JlLWZsb2F0cy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OWViMTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL21vcmUtZmxvYXRzLmRhdGEKQEAgLTAsMCArMSBAQAorWzAuMCwgKzEuMCwgLTEuMCwgKy5pbmYsIC0uaW5mLCAubmFuLCAubmFuXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9tdWx0aS1jb25zdHJ1Y3Rvci5jb2RlIGIvdGVzdHMvZGF0YS9tdWx0aS1jb25zdHJ1Y3Rvci5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MGQ4NTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL211bHRpLWNvbnN0cnVjdG9yLmNvZGUKQEAgLTAsMCArMSw0IEBACitbCisgICAgeydUYWcxJzogWydhJywgMSwgJ2InLCAyXX0sCisgICAgeydUYWcyJzogWydhJywgMSwgJ2InLCAyXX0sCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL211bHRpLWNvbnN0cnVjdG9yLm11bHRpIGIvdGVzdHMvZGF0YS9tdWx0aS1jb25zdHJ1Y3Rvci5tdWx0aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjVkNzFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9tdWx0aS1jb25zdHJ1Y3Rvci5tdWx0aQpAQCAtMCwwICsxLDMgQEAKKy0tLQorLSAhVGFnMSBbYSwgMSwgYiwgMl0KKy0gISFUYWcyIFthLCAxLCBiLCAyXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9teWZ1bGxsb2FkZXIuc3ViY2xhc3NfYmxhY2tsaXN0IGIvdGVzdHMvZGF0YS9teWZ1bGxsb2FkZXIuc3ViY2xhc3NfYmxhY2tsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWEyYjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL215ZnVsbGxvYWRlci5zdWJjbGFzc19ibGFja2xpc3QKQEAgLTAsMCArMSw1IEBACistICEhcHl0aG9uL29iamVjdC9uZXc6eWFtbC5NYXBwaW5nTm9kZQorICBhcmdzOgorICBzdGF0ZToKKyAgICBteW1ldGhvZDogdGVzdAorICAgIHdyb25nX21ldGhvZDogdGVzdDIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbmVnYXRpdmUtZmxvYXQtYnVnLmNvZGUgYi90ZXN0cy9kYXRhL25lZ2F0aXZlLWZsb2F0LWJ1Zy5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTE2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL25lZ2F0aXZlLWZsb2F0LWJ1Zy5jb2RlCkBAIC0wLDAgKzEgQEAKKy0xLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbmVnYXRpdmUtZmxvYXQtYnVnLmRhdGEgYi90ZXN0cy9kYXRhL25lZ2F0aXZlLWZsb2F0LWJ1Zy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTE2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL25lZ2F0aXZlLWZsb2F0LWJ1Zy5kYXRhCkBAIC0wLDAgKzEgQEAKKy0xLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbm8tYWxpYXMtYW5jaG9yLmVtaXR0ZXItZXJyb3IgYi90ZXN0cy9kYXRhL25vLWFsaWFzLWFuY2hvci5lbWl0dGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjA2NWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL25vLWFsaWFzLWFuY2hvci5lbWl0dGVyLWVycm9yCkBAIC0wLDAgKzEsOCBAQAorLSAhU3RyZWFtU3RhcnQKKy0gIURvY3VtZW50U3RhcnQKKy0gIVNlcXVlbmNlU3RhcnQKKy0gIVNjYWxhciB7IGFuY2hvcjogQSwgdmFsdWU6IGRhdGEgfQorLSAhQWxpYXMgeyB9CistICFTZXF1ZW5jZUVuZAorLSAhRG9jdW1lbnRFbmQKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9uby1hbGlhcy1hbmNob3Iuc2tpcC1leHQgYi90ZXN0cy9kYXRhL25vLWFsaWFzLWFuY2hvci5za2lwLWV4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9uby1hbGlhcy1hbmNob3Iuc2tpcC1leHQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbm8tYmxvY2stY29sbGVjdGlvbi1lbmQubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9uby1ibG9jay1jb2xsZWN0aW9uLWVuZC5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkNGQzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvbm8tYmxvY2stY29sbGVjdGlvbi1lbmQubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMyBAQAorLSBmb28KKy0gYmFyCitiYXo6IGJhcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9uby1ibG9jay1tYXBwaW5nLWVuZC0yLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvbm8tYmxvY2stbWFwcGluZy1lbmQtMi5sb2FkZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2MzU3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvbm8tYmxvY2stbWFwcGluZy1lbmQtMi5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSwzIEBACis/IGZvbworOiBiYXIKKzogYmF6CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL25vLWJsb2NrLW1hcHBpbmctZW5kLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvbm8tYmxvY2stbWFwcGluZy1lbmQubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTkyMWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL25vLWJsb2NrLW1hcHBpbmctZW5kLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACitmb286ICJiYXIiICJiYXoiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL25vLWRvY3VtZW50LXN0YXJ0LmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvbm8tZG9jdW1lbnQtc3RhcnQubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjVlYzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL25vLWRvY3VtZW50LXN0YXJ0LmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDMgQEAKKyVZQU1MICAgMS4xCisjIG5vIC0tLQorZm9vOiBiYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbm8tZmxvdy1tYXBwaW5nLWVuZC5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL25vLWZsb3ctbWFwcGluZy1lbmQubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZDE0MDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL25vLWZsb3ctbWFwcGluZy1lbmQubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKK3sgZm9vOiBiYXIgXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9uby1mbG93LXNlcXVlbmNlLWVuZC5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL25vLWZsb3ctc2VxdWVuY2UtZW5kLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTBkOTczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9uby1mbG93LXNlcXVlbmNlLWVuZC5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorW2ZvbywgYmFyfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9uby1ub2RlLTEubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9uby1ub2RlLTEubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YjE1MDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL25vLW5vZGUtMS5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLSAhZm9vIF0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvbm8tbm9kZS0yLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvbm8tbm9kZS0yLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNlM2IzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9uby1ub2RlLTIubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEgQEAKKy0gWyAhZm9vIH0gXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9uby10YWcuZW1pdHRlci1lcnJvciBiL3Rlc3RzL2RhdGEvbm8tdGFnLmVtaXR0ZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg0YzYyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvbm8tdGFnLmVtaXR0ZXItZXJyb3IKQEAgLTAsMCArMSw1IEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydAorLSAhU2NhbGFyIHsgdmFsdWU6ICdmb28nLCBpbXBsaWNpdDogW2ZhbHNlLGZhbHNlXSB9CistICFEb2N1bWVudEVuZAorLSAhU3RyZWFtRW5kCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL251bGwuZGF0YSBiL3Rlc3RzL2RhdGEvbnVsbC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMTI1MjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL251bGwuZGF0YQpAQCAtMCwwICsxLDMgQEAKKy0KKy0gfgorLSBudWxsCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL251bGwuZGV0ZWN0IGIvdGVzdHMvZGF0YS9udWxsLmRldGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTExMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9udWxsLmRldGVjdApAQCAtMCwwICsxIEBACit0YWc6eWFtbC5vcmcsMjAwMjpudWxsCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL29kZC11dGYxNi5zdHJlYW0tZXJyb3IgYi90ZXN0cy9kYXRhL29kZC11dGYxNi5zdHJlYW0tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU5ZTQzNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvb2RkLXV0ZjE2LnN0cmVhbS1lcnJvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL292ZXJ3cml0ZS1zdGF0ZS1uZXctY29uc3RydWN0b3IubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS9vdmVyd3JpdGUtc3RhdGUtbmV3LWNvbnN0cnVjdG9yLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDIyNGYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9vdmVyd3JpdGUtc3RhdGUtbmV3LWNvbnN0cnVjdG9yLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDUgQEAKKy0gISFweXRob24vb2JqZWN0L25ldzp5YW1sLk1hcHBpbmdOb2RlCisgIGFyZ3M6CisgIHN0YXRlOgorICAgIGV4dGVuZDogdGVzdAorICAgIF9fdGVzdF9fOiB0ZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3JlY3Vyc2l2ZS1hbmNob3IuZm9ybWVyLWxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvcmVjdXJzaXZlLWFuY2hvci5mb3JtZXItbG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTE2NmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3JlY3Vyc2l2ZS1hbmNob3IuZm9ybWVyLWxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDQgQEAKKy0gJmZvbyBbMQorICAgIDIsCisgICAgMywKKyAgICAqZm9vXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9yZWN1cnNpdmUtZGljdC5yZWN1cnNpdmUgYi90ZXN0cy9kYXRhL3JlY3Vyc2l2ZS1kaWN0LnJlY3Vyc2l2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMyNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9yZWN1cnNpdmUtZGljdC5yZWN1cnNpdmUKQEAgLTAsMCArMSwzIEBACit2YWx1ZSA9IHt9CitpbnN0YW5jZSA9IEFuSW5zdGFuY2UodmFsdWUsIHZhbHVlKQordmFsdWVbaW5zdGFuY2VdID0gaW5zdGFuY2UKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvcmVjdXJzaXZlLWxpc3QucmVjdXJzaXZlIGIvdGVzdHMvZGF0YS9yZWN1cnNpdmUtbGlzdC5yZWN1cnNpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhNGFlNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvcmVjdXJzaXZlLWxpc3QucmVjdXJzaXZlCkBAIC0wLDAgKzEsMiBAQAordmFsdWUgPSBbXQordmFsdWUuYXBwZW5kKHZhbHVlKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9yZWN1cnNpdmUtc2V0LnJlY3Vyc2l2ZSBiL3Rlc3RzL2RhdGEvcmVjdXJzaXZlLXNldC5yZWN1cnNpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3YzUwZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvcmVjdXJzaXZlLXNldC5yZWN1cnNpdmUKQEAgLTAsMCArMSw3IEBACit0cnk6CisgICAgc2V0CitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gc2V0cyBpbXBvcnQgU2V0IGFzIHNldAordmFsdWUgPSBzZXQoKQordmFsdWUuYWRkKEFuSW5zdGFuY2UoZm9vPXZhbHVlLCBiYXI9dmFsdWUpKQordmFsdWUuYWRkKEFuSW5zdGFuY2UoZm9vPXZhbHVlLCBiYXI9dmFsdWUpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9yZWN1cnNpdmUtc3RhdGUucmVjdXJzaXZlIGIvdGVzdHMvZGF0YS9yZWN1cnNpdmUtc3RhdGUucmVjdXJzaXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZmU2MWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3JlY3Vyc2l2ZS1zdGF0ZS5yZWN1cnNpdmUKQEAgLTAsMCArMSwyIEBACit2YWx1ZSA9IFtdCit2YWx1ZS5hcHBlbmQoQW5JbnN0YW5jZVdpdGhTdGF0ZSh2YWx1ZSwgdmFsdWUpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9yZWN1cnNpdmUtdHVwbGUucmVjdXJzaXZlIGIvdGVzdHMvZGF0YS9yZWN1cnNpdmUtdHVwbGUucmVjdXJzaXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMDhkMDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3JlY3Vyc2l2ZS10dXBsZS5yZWN1cnNpdmUKQEAgLTAsMCArMSwzIEBACit2YWx1ZSA9IChbXSwgW10pCit2YWx1ZVswXS5hcHBlbmQodmFsdWUpCit2YWx1ZVsxXS5hcHBlbmQodmFsdWVbMF0pCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3JlY3Vyc2l2ZS5mb3JtZXItZHVtcGVyLWVycm9yIGIvdGVzdHMvZGF0YS9yZWN1cnNpdmUuZm9ybWVyLWR1bXBlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzdjYzJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9yZWN1cnNpdmUuZm9ybWVyLWR1bXBlci1lcnJvcgpAQCAtMCwwICsxLDMgQEAKK2RhdGEgPSBbXQorZGF0YS5hcHBlbmQoZGF0YSkKK2R1bXAoZGF0YSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvcmVtb3ZlLXBvc3NpYmxlLXNpbXBsZS1rZXktYnVnLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvcmVtb3ZlLXBvc3NpYmxlLXNpbXBsZS1rZXktYnVnLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTFiYzZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9yZW1vdmUtcG9zc2libGUtc2ltcGxlLWtleS1idWcubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMyBAQAorZm9vOiAmQSBiYXIKKypBIF0gICAgIyBUaGUgJ10nIGluZGljYXRvciB0cmlnZ2VycyByZW1vdmVfcG9zc2libGVfc2ltcGxlX2tleSwKKyAgICAgICAgIyB3aGljaCBzaG91bGQgcmFpc2UgYW4gZXJyb3IuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Jlc29sdmVyLmRhdGEgYi90ZXN0cy9kYXRhL3Jlc29sdmVyLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5NjQwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvcmVzb2x2ZXIuZGF0YQpAQCAtMCwwICsxLDMwIEBACistLS0KKyJ0aGlzIHNjYWxhciBzaG91bGQgYmUgc2VsZWN0ZWQiCistLS0KK2tleTExOiAhZm9vCisgICAga2V5MTI6CisgICAgICAgIGlzOiBbc2VsZWN0ZWRdCisgICAga2V5MjI6CisgICAgICAgIGtleTEzOiBbbm90LCBzZWxlY3RlZF0KKyAgICAgICAga2V5MjM6IFtub3QsIHNlbGVjdGVkXQorICAgIGtleTMyOgorICAgICAgICBrZXkzMTogW25vdCwgc2VsZWN0ZWRdCisgICAgICAgIGtleTMyOiBbbm90LCBzZWxlY3RlZF0KKyAgICAgICAga2V5MzM6IHtub3Q6IHNlbGVjdGVkfQora2V5MjE6ICFiYXIKKyAgICAtIG5vdCBzZWxlY3RlZAorICAgIC0gc2VsZWN0ZWQKKyAgICAtIG5vdCBzZWxlY3RlZAora2V5MzE6ICFiYXoKKyAgICBrZXkxMjoKKyAgICAgICAga2V5MTM6CisgICAgICAgICAgICBrZXkxNDoge3NlbGVjdGVkfQorICAgICAgICBrZXkyMzoKKyAgICAgICAgICAgIGtleTE0OiBbbm90LCBzZWxlY3RlZF0KKyAgICAgICAga2V5MzM6CisgICAgICAgICAgICBrZXkxNDoge3NlbGVjdGVkfQorICAgICAgICAgICAga2V5MjQ6IHtub3Q6IHNlbGVjdGVkfQorICAgIGtleTIyOgorICAgICAgICAtICAga2V5MTQ6IHtzZWxlY3RlZH0KKyAgICAgICAgICAgIGtleTI0OiB7bm90OiBzZWxlY3RlZH0KKyAgICAgICAgLSAgIGtleTE0OiB7c2VsZWN0ZWR9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Jlc29sdmVyLnBhdGggYi90ZXN0cy9kYXRhL3Jlc29sdmVyLnBhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2NzdkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvcmVzb2x2ZXIucGF0aApAQCAtMCwwICsxLDMwIEBACistLS0gIXJvb3Qvc2NhbGFyCisidGhpcyBzY2FsYXIgc2hvdWxkIGJlIHNlbGVjdGVkIgorLS0tICFyb290CitrZXkxMTogIWZvbworICAgIGtleTEyOiAhcm9vdC9rZXkxMS9rZXkxMi8qCisgICAgICAgIGlzOiBbc2VsZWN0ZWRdCisgICAga2V5MjI6CisgICAgICAgIGtleTEzOiBbbm90LCBzZWxlY3RlZF0KKyAgICAgICAga2V5MjM6IFtub3QsIHNlbGVjdGVkXQorICAgIGtleTMyOgorICAgICAgICBrZXkzMTogW25vdCwgc2VsZWN0ZWRdCisgICAgICAgIGtleTMyOiBbbm90LCBzZWxlY3RlZF0KKyAgICAgICAga2V5MzM6IHtub3Q6IHNlbGVjdGVkfQora2V5MjE6ICFiYXIKKyAgICAtIG5vdCBzZWxlY3RlZAorICAgIC0gIXJvb3Qva2V5MjEvMS8qIHNlbGVjdGVkCisgICAgLSBub3Qgc2VsZWN0ZWQKK2tleTMxOiAhYmF6CisgICAga2V5MTI6CisgICAgICAgIGtleTEzOgorICAgICAgICAgICAga2V5MTQ6ICFyb290L2tleTMxLyovKi9rZXkxNC9tYXAge3NlbGVjdGVkfQorICAgICAgICBrZXkyMzoKKyAgICAgICAgICAgIGtleTE0OiBbbm90LCBzZWxlY3RlZF0KKyAgICAgICAga2V5MzM6CisgICAgICAgICAgICBrZXkxNDogIXJvb3Qva2V5MzEvKi8qL2tleTE0L21hcCB7c2VsZWN0ZWR9CisgICAgICAgICAgICBrZXkyNDoge25vdDogc2VsZWN0ZWR9CisgICAga2V5MjI6CisgICAgICAgIC0gICBrZXkxNDogIXJvb3Qva2V5MzEvKi8qL2tleTE0L21hcCB7c2VsZWN0ZWR9CisgICAgICAgICAgICBrZXkyNDoge25vdDogc2VsZWN0ZWR9CisgICAgICAgIC0gICBrZXkxNDogIXJvb3Qva2V5MzEvKi8qL2tleTE0L21hcCB7c2VsZWN0ZWR9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3J1bi1wYXJzZXItY3Jhc2gtYnVnLmRhdGEgYi90ZXN0cy9kYXRhL3J1bi1wYXJzZXItY3Jhc2gtYnVnLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUwMTczNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvcnVuLXBhcnNlci1jcmFzaC1idWcuZGF0YQpAQCAtMCwwICsxLDggQEAKKy0tLQorLSBIYXJyeSBQb3R0ZXIgYW5kIHRoZSBQcmlzb25lciBvZiBBemthYmFuCistIEhhcnJ5IFBvdHRlciBhbmQgdGhlIEdvYmxldCBvZiBGaXJlCistIEhhcnJ5IFBvdHRlciBhbmQgdGhlIE9yZGVyIG9mIHRoZSBQaG9lbml4CistLS0KKy0gTWVtb2lycyBGb3VuZCBpbiBhIEJhdGh0dWIKKy0gU25vdyBDcmFzaAorLSBHaG9zdCBXb3JsZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zY2FsYXJzLmV2ZW50cyBiL3Rlc3RzL2RhdGEvc2NhbGFycy5ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjNDBmNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc2NhbGFycy5ldmVudHMKQEAgLTAsMCArMSwyOCBAQAorLSAhU3RyZWFtU3RhcnQKKworLSAhRG9jdW1lbnRTdGFydAorLSAhTWFwcGluZ1N0YXJ0CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAnZW1wdHkgc2NhbGFyJyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsZmFsc2VdLCB2YWx1ZTogJycgfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2ltcGxpY2l0IHNjYWxhcicgfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2RhdGEnIH0KKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSwgdmFsdWU6ICdxdW90ZWQgc2NhbGFyJyB9CistICFTY2FsYXIgeyB2YWx1ZTogJ2RhdGEnLCBzdHlsZTogJyInIH0KKy0gIVNjYWxhciB7IGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSwgdmFsdWU6ICdibG9jayBzY2FsYXInIH0KKy0gIVNjYWxhciB7IHZhbHVlOiAnZGF0YScsIHN0eWxlOiAnfCcgfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2VtcHR5IHNjYWxhciB3aXRoIHRhZycgfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFtmYWxzZSxmYWxzZV0sIHRhZzogJyFteXRhZycsIHZhbHVlOiAnJyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAnaW1wbGljaXQgc2NhbGFyIHdpdGggdGFnJyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW2ZhbHNlLGZhbHNlXSwgdGFnOiAnIW15dGFnJywgdmFsdWU6ICdkYXRhJyB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAncXVvdGVkIHNjYWxhciB3aXRoIHRhZycgfQorLSAhU2NhbGFyIHsgdmFsdWU6ICdkYXRhJywgc3R5bGU6ICciJywgdGFnOiAnIW15dGFnJywgaW1wbGljaXQ6IFtmYWxzZSxmYWxzZV0gfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ2Jsb2NrIHNjYWxhciB3aXRoIHRhZycgfQorLSAhU2NhbGFyIHsgdmFsdWU6ICdkYXRhJywgc3R5bGU6ICd8JywgdGFnOiAnIW15dGFnJywgaW1wbGljaXQ6IFtmYWxzZSxmYWxzZV0gfQorLSAhU2NhbGFyIHsgaW1wbGljaXQ6IFt0cnVlLHRydWVdLCB2YWx1ZTogJ3NpbmdsZSBjaGFyYWN0ZXInIH0KKy0gIVNjYWxhciB7IHZhbHVlOiAnYScsIGltcGxpY2l0OiBbdHJ1ZSx0cnVlXSB9CistICFTY2FsYXIgeyBpbXBsaWNpdDogW3RydWUsdHJ1ZV0sIHZhbHVlOiAnc2luZ2xlIGRpZ2l0JyB9CistICFTY2FsYXIgeyB2YWx1ZTogJzEnLCBpbXBsaWNpdDogW3RydWUsZmFsc2VdIH0KKy0gIU1hcHBpbmdFbmQKKy0gIURvY3VtZW50RW5kCisKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zY2FuLWRvY3VtZW50LWVuZC1idWcuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zY2FuLWRvY3VtZW50LWVuZC1idWcuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMGU4YTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NjYW4tZG9jdW1lbnQtZW5kLWJ1Zy5jYW5vbmljYWwKQEAgLTAsMCArMSwzIEBACislWUFNTCAxLjEKKy0tLQorISFudWxsICIiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NjYW4tZG9jdW1lbnQtZW5kLWJ1Zy5kYXRhIGIvdGVzdHMvZGF0YS9zY2FuLWRvY3VtZW50LWVuZC1idWcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzcwNTQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zY2FuLWRvY3VtZW50LWVuZC1idWcuZGF0YQpAQCAtMCwwICsxLDMgQEAKKyMgVGlja2V0ICM0CistLS0KKy4uLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc2Nhbi1saW5lLWJyZWFrLWJ1Zy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NjYW4tbGluZS1icmVhay1idWcuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjA4YjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NjYW4tbGluZS1icmVhay1idWcuY2Fub25pY2FsCkBAIC0wLDAgKzEsMyBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsgPyAhIXN0ciAiZm9vIiA6ICEhc3RyICJiYXIgYmF6IiB9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NjYW4tbGluZS1icmVhay1idWcuZGF0YSBiL3Rlc3RzL2RhdGEvc2Nhbi1saW5lLWJyZWFrLWJ1Zy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzRmYWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NjYW4tbGluZS1icmVhay1idWcuZGF0YQpAQCAtMCwwICsxLDMgQEAKK2ZvbzoNCisgICAgYmFyDQorICAgIGJheg0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc2VxdWVuY2VzLmV2ZW50cyBiL3Rlc3RzL2RhdGEvc2VxdWVuY2VzLmV2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTJhMzI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zZXF1ZW5jZXMuZXZlbnRzCkBAIC0wLDAgKzEsODEgQEAKKy0gIVN0cmVhbVN0YXJ0CisKKy0gIURvY3VtZW50U3RhcnQKKy0gIVNlcXVlbmNlU3RhcnQKKy0gIVNlcXVlbmNlRW5kCistICFEb2N1bWVudEVuZAorCistICFEb2N1bWVudFN0YXJ0CistICFTZXF1ZW5jZVN0YXJ0IHsgdGFnOiAnIW15dGFnJywgaW1wbGljaXQ6IGZhbHNlIH0KKy0gIVNlcXVlbmNlRW5kCistICFEb2N1bWVudEVuZAorCistICFEb2N1bWVudFN0YXJ0CistICFTZXF1ZW5jZVN0YXJ0CistICFTZXF1ZW5jZVN0YXJ0CistICFTZXF1ZW5jZUVuZAorLSAhU2VxdWVuY2VTdGFydCB7IHRhZzogJyFteXRhZycsIGltcGxpY2l0OiBmYWxzZSB9CistICFTZXF1ZW5jZUVuZAorLSAhU2VxdWVuY2VTdGFydAorLSAhU2NhbGFyCistICFTY2FsYXIgeyB2YWx1ZTogJ2RhdGEnIH0KKy0gIVNjYWxhciB7IHRhZzogJyFteXRhZycsIGltcGxpY2l0OiBbZmFsc2UsZmFsc2VdLCB2YWx1ZTogJ2RhdGEnIH0KKy0gIVNlcXVlbmNlRW5kCistICFTZXF1ZW5jZVN0YXJ0CistICFTZXF1ZW5jZVN0YXJ0CistICFTZXF1ZW5jZVN0YXJ0CistICFTY2FsYXIKKy0gIVNlcXVlbmNlRW5kCistICFTZXF1ZW5jZUVuZAorLSAhU2VxdWVuY2VFbmQKKy0gIVNlcXVlbmNlU3RhcnQKKy0gIVNlcXVlbmNlU3RhcnQgeyB0YWc6ICchbXl0YWcnLCBpbXBsaWNpdDogZmFsc2UgfQorLSAhU2VxdWVuY2VTdGFydAorLSAhU2NhbGFyIHsgdmFsdWU6ICdkYXRhJyB9CistICFTZXF1ZW5jZUVuZAorLSAhU2VxdWVuY2VFbmQKKy0gIVNlcXVlbmNlRW5kCistICFTZXF1ZW5jZUVuZAorLSAhRG9jdW1lbnRFbmQKKworLSAhRG9jdW1lbnRTdGFydAorLSAhU2VxdWVuY2VTdGFydAorLSAhTWFwcGluZ1N0YXJ0CistICFTY2FsYXIgeyB2YWx1ZTogJ2tleTEnIH0KKy0gIVNlcXVlbmNlU3RhcnQKKy0gIVNjYWxhciB7IHZhbHVlOiAnZGF0YTEnIH0KKy0gIVNjYWxhciB7IHZhbHVlOiAnZGF0YTInIH0KKy0gIVNlcXVlbmNlRW5kCistICFTY2FsYXIgeyB2YWx1ZTogJ2tleTInIH0KKy0gIVNlcXVlbmNlU3RhcnQgeyB0YWc6ICchbXl0YWcxJywgaW1wbGljaXQ6IGZhbHNlIH0KKy0gIVNjYWxhciB7IHZhbHVlOiAnZGF0YTMnIH0KKy0gIVNlcXVlbmNlU3RhcnQKKy0gIVNjYWxhciB7IHZhbHVlOiAnZGF0YTQnIH0KKy0gIVNjYWxhciB7IHZhbHVlOiAnZGF0YTUnIH0KKy0gIVNlcXVlbmNlRW5kCistICFTZXF1ZW5jZVN0YXJ0IHsgdGFnOiAnIW15dGFnMicsIGltcGxpY2l0OiBmYWxzZSB9CistICFTY2FsYXIgeyB2YWx1ZTogJ2RhdGE2JyB9CistICFTY2FsYXIgeyB2YWx1ZTogJ2RhdGE3JyB9CistICFTZXF1ZW5jZUVuZAorLSAhU2VxdWVuY2VFbmQKKy0gIU1hcHBpbmdFbmQKKy0gIVNlcXVlbmNlRW5kCistICFEb2N1bWVudEVuZAorCistICFEb2N1bWVudFN0YXJ0CistICFTZXF1ZW5jZVN0YXJ0CistICFTZXF1ZW5jZVN0YXJ0IHsgZmxvd19zdHlsZTogdHJ1ZSB9CistICFTZXF1ZW5jZVN0YXJ0CistICFTZXF1ZW5jZUVuZAorLSAhU2NhbGFyCistICFTY2FsYXIgeyB2YWx1ZTogJ2RhdGEnIH0KKy0gIVNjYWxhciB7IHRhZzogJyFteXRhZycsIGltcGxpY2l0OiBbZmFsc2UsZmFsc2VdLCB2YWx1ZTogJ2RhdGEnIH0KKy0gIVNlcXVlbmNlU3RhcnQgeyB0YWc6ICchbXl0YWcnLCBpbXBsaWNpdDogZmFsc2UgfQorLSAhU2NhbGFyIHsgdmFsdWU6ICdkYXRhJyB9CistICFTY2FsYXIgeyB2YWx1ZTogJ2RhdGEnIH0KKy0gIVNlcXVlbmNlRW5kCistICFTZXF1ZW5jZUVuZAorLSAhU2VxdWVuY2VFbmQKKy0gIURvY3VtZW50RW5kCisKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zZXJpYWxpemVyLWlzLWFscmVhZHktb3BlbmVkLmR1bXBlci1lcnJvciBiL3Rlc3RzL2RhdGEvc2VyaWFsaXplci1pcy1hbHJlYWR5LW9wZW5lZC5kdW1wZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyMzUyNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc2VyaWFsaXplci1pcy1hbHJlYWR5LW9wZW5lZC5kdW1wZXItZXJyb3IKQEAgLTAsMCArMSwzIEBACitkdW1wZXIgPSB5YW1sLkR1bXBlcihTdHJpbmdJTygpKQorZHVtcGVyLm9wZW4oKQorZHVtcGVyLm9wZW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zZXJpYWxpemVyLWlzLWNsb3NlZC0xLmR1bXBlci1lcnJvciBiL3Rlc3RzL2RhdGEvc2VyaWFsaXplci1pcy1jbG9zZWQtMS5kdW1wZXItZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3ZTYwMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc2VyaWFsaXplci1pcy1jbG9zZWQtMS5kdW1wZXItZXJyb3IKQEAgLTAsMCArMSw0IEBACitkdW1wZXIgPSB5YW1sLkR1bXBlcihTdHJpbmdJTygpKQorZHVtcGVyLm9wZW4oKQorZHVtcGVyLmNsb3NlKCkKK2R1bXBlci5vcGVuKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc2VyaWFsaXplci1pcy1jbG9zZWQtMi5kdW1wZXItZXJyb3IgYi90ZXN0cy9kYXRhL3NlcmlhbGl6ZXItaXMtY2xvc2VkLTIuZHVtcGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YWVmN2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NlcmlhbGl6ZXItaXMtY2xvc2VkLTIuZHVtcGVyLWVycm9yCkBAIC0wLDAgKzEsNCBAQAorZHVtcGVyID0geWFtbC5EdW1wZXIoU3RyaW5nSU8oKSkKK2R1bXBlci5vcGVuKCkKK2R1bXBlci5jbG9zZSgpCitkdW1wZXIuc2VyaWFsaXplKHlhbWwuU2NhbGFyTm9kZSh0YWc9JyFmb28nLCB2YWx1ZT0nYmFyJykpCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NlcmlhbGl6ZXItaXMtbm90LW9wZW5lZC0xLmR1bXBlci1lcnJvciBiL3Rlc3RzL2RhdGEvc2VyaWFsaXplci1pcy1ub3Qtb3BlbmVkLTEuZHVtcGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjJlNzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NlcmlhbGl6ZXItaXMtbm90LW9wZW5lZC0xLmR1bXBlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKK2R1bXBlciA9IHlhbWwuRHVtcGVyKFN0cmluZ0lPKCkpCitkdW1wZXIuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zZXJpYWxpemVyLWlzLW5vdC1vcGVuZWQtMi5kdW1wZXItZXJyb3IgYi90ZXN0cy9kYXRhL3NlcmlhbGl6ZXItaXMtbm90LW9wZW5lZC0yLmR1bXBlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmQ5ZGYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zZXJpYWxpemVyLWlzLW5vdC1vcGVuZWQtMi5kdW1wZXItZXJyb3IKQEAgLTAsMCArMSwyIEBACitkdW1wZXIgPSB5YW1sLkR1bXBlcihTdHJpbmdJTygpKQorZHVtcGVyLnNlcmlhbGl6ZSh5YW1sLlNjYWxhck5vZGUodGFnPSchZm9vJywgdmFsdWU9J2JhcicpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zaW5nbGUtZG90LWlzLW5vdC1mbG9hdC1idWcuY29kZSBiL3Rlc3RzL2RhdGEvc2luZ2xlLWRvdC1pcy1ub3QtZmxvYXQtYnVnLmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkMGMyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc2luZ2xlLWRvdC1pcy1ub3QtZmxvYXQtYnVnLmNvZGUKQEAgLTAsMCArMSBAQAorJy4nCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NpbmdsZS1kb3QtaXMtbm90LWZsb2F0LWJ1Zy5kYXRhIGIvdGVzdHMvZGF0YS9zaW5nbGUtZG90LWlzLW5vdC1mbG9hdC1idWcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzU1OGUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zaW5nbGUtZG90LWlzLW5vdC1mbG9hdC1idWcuZGF0YQpAQCAtMCwwICsxIEBACisuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Nsb3BweS1pbmRlbnRhdGlvbi5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3Nsb3BweS1pbmRlbnRhdGlvbi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4YmMwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc2xvcHB5LWluZGVudGF0aW9uLmNhbm9uaWNhbApAQCAtMCwwICsxLDE4IEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeyAKKyAgICA/ICEhc3RyICJpbiB0aGUgYmxvY2sgY29udGV4dCIKKyAgICA6ICEhbWFwIHsKKyAgICAgICAgPyAhIXN0ciAiaW5kZW50YXRpb24gc2hvdWxkIGJlIGtlcHQiCisgICAgICAgIDogISFtYXAgeworICAgICAgICAgICAgPyAhIXN0ciAiYnV0IGluIHRoZSBmbG93IGNvbnRleHQiCisgICAgICAgICAgICA6ICEhc2VxIFsgISFzdHIgIml0IG1heSBiZSB2aW9sYXRlZCIgXQorICAgICAgICB9CisgICAgfQorfQorLS0tICEhc3RyCisidGhlIHBhcnNlciBkb2VzIG5vdCByZXF1aXJlIHNjYWxhcnMgdG8gYmUgaW5kZW50ZWQgd2l0aCBhdCBsZWFzdCBvbmUgc3BhY2UiCistLS0gISFzdHIKKyJ0aGUgcGFyc2VyIGRvZXMgbm90IHJlcXVpcmUgc2NhbGFycyB0byBiZSBpbmRlbnRlZCB3aXRoIGF0IGxlYXN0IG9uZSBzcGFjZSIKKy0tLSAhIW1hcAoreyA/ICEhc3RyICJmb28iOiB7ID8gISFzdHIgImJhciIgOiAhIXN0ciAicXVvdGVkIHNjYWxhcnMgbWF5IG5vdCBhZGhlcmUgaW5kZW50YXRpb24iIH0gfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zbG9wcHktaW5kZW50YXRpb24uZGF0YSBiL3Rlc3RzL2RhdGEvc2xvcHB5LWluZGVudGF0aW9uLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViNGY1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc2xvcHB5LWluZGVudGF0aW9uLmRhdGEKQEAgLTAsMCArMSwxNyBAQAorLS0tCitpbiB0aGUgYmxvY2sgY29udGV4dDoKKyAgICBpbmRlbnRhdGlvbiBzaG91bGQgYmUga2VwdDogeyAKKyAgICBidXQgaW4gdGhlIGZsb3cgY29udGV4dDogWworaXQgbWF5IGJlIHZpb2xhdGVkXQorfQorLS0tCit0aGUgcGFyc2VyIGRvZXMgbm90IHJlcXVpcmUgc2NhbGFycwordG8gYmUgaW5kZW50ZWQgd2l0aCBhdCBsZWFzdCBvbmUgc3BhY2UKKy4uLgorLS0tCisidGhlIHBhcnNlciBkb2VzIG5vdCByZXF1aXJlIHNjYWxhcnMKK3RvIGJlIGluZGVudGVkIHdpdGggYXQgbGVhc3Qgb25lIHNwYWNlIgorLS0tCitmb286CisgICAgYmFyOiAncXVvdGVkIHNjYWxhcnMKK21heSBub3QgYWRoZXJlIGluZGVudGF0aW9uJwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTAxLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTJlNjcxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTAxLmRhdGEKQEAgLTAsMCArMSwzIEBACistIE1hcmsgTWNHd2lyZQorLSBTYW1teSBTb3NhCistIEtlbiBHcmlmZmV5CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMDEuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTAxLnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMyZjRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTAxLnN0cnVjdHVyZQpAQCAtMCwwICsxIEBACitbVHJ1ZSwgVHJ1ZSwgVHJ1ZV0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0wMS50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDEudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDRjYWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDEudG9rZW5zCkBAIC0wLDAgKzEgQEAKK1tbICwgXyAsIF8gLCBfIF19CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMDIuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wMi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2VjOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDIuZGF0YQpAQCAtMCwwICsxLDMgQEAKK2hyOiAgNjUgICAgIyBIb21lIHJ1bnMKK2F2ZzogMC4yNzggIyBCYXR0aW5nIGF2ZXJhZ2UKK3JiaTogMTQ3ICAgIyBSdW5zIEJhdHRlZCBJbgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTAyLnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wMi5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhMWNlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wMi5zdHJ1Y3R1cmUKQEAgLTAsMCArMSBAQAorWyhUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSldCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMDIudG9rZW5zIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTAyLnRva2VucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGUzODFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTAyLnRva2VucwpAQCAtMCwwICsxLDUgQEAKK3t7Cis/IF8gOiBfCis/IF8gOiBfCis/IF8gOiBfCitdfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTAzLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZkNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTAzLmRhdGEKQEAgLTAsMCArMSw4IEBACithbWVyaWNhbjoKKyAgLSBCb3N0b24gUmVkIFNveAorICAtIERldHJvaXQgVGlnZXJzCisgIC0gTmV3IFlvcmsgWWFua2VlcworbmF0aW9uYWw6CisgIC0gTmV3IFlvcmsgTWV0cworICAtIENoaWNhZ28gQ3VicworICAtIEF0bGFudGEgQnJhdmVzCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMDMuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTAzLnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWRlNWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTAzLnN0cnVjdHVyZQpAQCAtMCwwICsxIEBACitbKFRydWUsIFtUcnVlLCBUcnVlLCBUcnVlXSksIChUcnVlLCBbVHJ1ZSwgVHJ1ZSwgVHJ1ZV0pXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTAzLnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wMy50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4MTVmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wMy50b2tlbnMKQEAgLTAsMCArMSw0IEBACit7eworPyBfIDogW1sgLCBfICwgXyAsIF8gXX0KKz8gXyA6IFtbICwgXyAsIF8gLCBfIF19CitdfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA0LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzBmNmIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA0LmRhdGEKQEAgLTAsMCArMSw4IEBACistCisgIG5hbWU6IE1hcmsgTWNHd2lyZQorICBocjogICA2NQorICBhdmc6ICAwLjI3OAorLQorICBuYW1lOiBTYW1teSBTb3NhCisgIGhyOiAgIDYzCisgIGF2ZzogIDAuMjg4CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMDQuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA0LnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2I1MjZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA0LnN0cnVjdHVyZQpAQCAtMCwwICsxLDQgQEAKK1sKKyAgICBbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0sCisgICAgWyhUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSldLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA0LnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNC50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNiOTgxNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNC50b2tlbnMKQEAgLTAsMCArMSw0IEBACitbWworLCB7eyA/IF8gOiBfID8gXyA6IF8gPyBfIDogXyBdfQorLCB7eyA/IF8gOiBfID8gXyA6IF8gPyBfIDogXyBdfQorXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkNzc3MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNS5kYXRhCkBAIC0wLDAgKzEsMyBAQAorLSBbbmFtZSAgICAgICAgLCBociwgYXZnICBdCistIFtNYXJrIE1jR3dpcmUsIDY1LCAwLjI3OF0KKy0gW1NhbW15IFNvc2EgICwgNjMsIDAuMjg4XQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA1LnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNS5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2Yjc1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNS5zdHJ1Y3R1cmUKQEAgLTAsMCArMSw1IEBACitbCisgICAgW1RydWUsIFRydWUsIFRydWVdLAorICAgIFtUcnVlLCBUcnVlLCBUcnVlXSwKKyAgICBbVHJ1ZSwgVHJ1ZSwgVHJ1ZV0sCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMDUudG9rZW5zIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA1LnRva2VucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjZmMWFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA1LnRva2VucwpAQCAtMCwwICsxLDUgQEAKK1tbCissIFsgXyAsIF8gLCBfIF0KKywgWyBfICwgXyAsIF8gXQorLCBbIF8gLCBfICwgXyBdCitdfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA2LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDYuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTk1N2IyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA2LmRhdGEKQEAgLTAsMCArMSw1IEBACitNYXJrIE1jR3dpcmU6IHtocjogNjUsIGF2ZzogMC4yNzh9CitTYW1teSBTb3NhOiB7CisgICAgaHI6IDYzLAorICAgIGF2ZzogMC4yODgKKyAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA2LnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNi5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmMGY0YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNi5zdHJ1Y3R1cmUKQEAgLTAsMCArMSw0IEBACitbCisgICAgKFRydWUsIFsoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0pLAorICAgIChUcnVlLCBbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSldKSwKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNi50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDYudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTVlZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDYudG9rZW5zCkBAIC0wLDAgKzEsNCBAQAore3sKKz8gXyA6IHsgPyBfIDogXyAsID8gXyA6IF8gfQorPyBfIDogeyA/IF8gOiBfICwgPyBfIDogXyB9CitdfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA3LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzcxMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA3LmRhdGEKQEAgLTAsMCArMSwxMCBAQAorIyBSYW5raW5nIG9mIDE5OTggaG9tZSBydW5zCistLS0KKy0gTWFyayBNY0d3aXJlCistIFNhbW15IFNvc2EKKy0gS2VuIEdyaWZmZXkKKworIyBUZWFtIHJhbmtpbmcKKy0tLQorLSBDaGljYWdvIEN1YnMKKy0gU3QgTG91aXMgQ2FyZGluYWxzCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMDcuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA3LnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ3MmEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA3LnN0cnVjdHVyZQpAQCAtMCwwICsxLDQgQEAKK1sKK1tUcnVlLCBUcnVlLCBUcnVlXSwKK1tUcnVlLCBUcnVlXSwKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0wNy50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDcudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNDg4ODMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDcudG9rZW5zCkBAIC0wLDAgKzEsMTIgQEAKKy0tLQorW1sKKywgXworLCBfCissIF8KK119CisKKy0tLQorW1sKKywgXworLCBfCitdfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA4LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDguZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWUxMDJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA4LmRhdGEKQEAgLTAsMCArMSwxMCBAQAorLS0tCit0aW1lOiAyMDowMzoyMAorcGxheWVyOiBTYW1teSBTb3NhCithY3Rpb246IHN0cmlrZSAobWlzcykKKy4uLgorLS0tCit0aW1lOiAyMDowMzo0NworcGxheWVyOiBTYW1teSBTb3NhCithY3Rpb246IGdyYW5kIHNsYW0KKy4uLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA4LnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wOC5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjZmY3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wOC5zdHJ1Y3R1cmUKQEAgLTAsMCArMSw0IEBACitbCitbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0sCitbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0sCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMDgudG9rZW5zIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA4LnRva2VucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJjMDNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA4LnRva2VucwpAQCAtMCwwICsxLDE1IEBACistLS0KK3t7Cis/IF8gOiBfCis/IF8gOiBfCis/IF8gOiBfCitdfQorLi4uCisKKy0tLQore3sKKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6IF8KK119CisuLi4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0wOS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTA5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2NDE4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wOS5kYXRhCkBAIC0wLDAgKzEsOCBAQAorLS0tCitocjogIyAxOTk4IGhyIHJhbmtpbmcKKyAgLSBNYXJrIE1jR3dpcmUKKyAgLSBTYW1teSBTb3NhCityYmk6CisgICMgMTk5OCByYmkgcmFua2luZworICAtIFNhbW15IFNvc2EKKyAgLSBLZW4gR3JpZmZleQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTA5LnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wOS5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRjOTkxNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0wOS5zdHJ1Y3R1cmUKQEAgLTAsMCArMSBAQAorWyhUcnVlLCBbVHJ1ZSwgVHJ1ZV0pLCAoVHJ1ZSwgW1RydWUsIFRydWVdKV0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0wOS50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDkudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWMxMGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMDkudG9rZW5zCkBAIC0wLDAgKzEsNSBAQAorLS0tCit7eworPyBfIDogW1sgLCBfICwgXyBdfQorPyBfIDogW1sgLCBfICwgXyBdfQorXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTEwLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4MDhmNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMC5kYXRhCkBAIC0wLDAgKzEsOCBAQAorLS0tCitocjoKKyAgLSBNYXJrIE1jR3dpcmUKKyAgIyBGb2xsb3dpbmcgbm9kZSBsYWJlbGVkIFNTCisgIC0gJlNTIFNhbW15IFNvc2EKK3JiaToKKyAgLSAqU1MgIyBTdWJzZXF1ZW50IG9jY3VycmVuY2UKKyAgLSBLZW4gR3JpZmZleQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTEwLnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMC5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4ZjRjMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMC5zdHJ1Y3R1cmUKQEAgLTAsMCArMSBAQAorWyhUcnVlLCBbVHJ1ZSwgVHJ1ZV0pLCAoVHJ1ZSwgWycqJywgVHJ1ZV0pXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTEwLnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMC50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjYWEyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMC50b2tlbnMKQEAgLTAsMCArMSw1IEBACistLS0KK3t7Cis/IF8gOiBbWyAsIF8gLCAmIF8gXX0KKz8gXyA6IFtbICwgKiAsIF8gXX0KK119CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMTEuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMjNjZTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTEuZGF0YQpAQCAtMCwwICsxLDkgQEAKKz8gLSBEZXRyb2l0IFRpZ2VycworICAtIENoaWNhZ28gY3VicworOgorICAtIDIwMDEtMDctMjMKKworPyBbIE5ldyBZb3JrIFlhbmtlZXMsCisgICAgQXRsYW50YSBCcmF2ZXMgXQorOiBbIDIwMDEtMDctMDIsIDIwMDEtMDgtMTIsCisgICAgMjAwMS0wOC0xNCBdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMTEuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTExLnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDhmMWZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTExLnN0cnVjdHVyZQpAQCAtMCwwICsxLDQgQEAKK1sKKyhbVHJ1ZSwgVHJ1ZV0sIFtUcnVlXSksCisoW1RydWUsIFRydWVdLCBbVHJ1ZSwgVHJ1ZSwgVHJ1ZV0pLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTExLnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMS50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyNDIwMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMS50b2tlbnMKQEAgLTAsMCArMSw2IEBACit7eworPyBbWyAsIF8gLCBfIF19Cis6IFtbICwgXyBdfQorPyBbIF8gLCBfIF0KKzogWyBfICwgXyAsIF8gXQorXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTEyLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjMzNmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMi5kYXRhCkBAIC0wLDAgKzEsOCBAQAorLS0tCisjIHByb2R1Y3RzIHB1cmNoYXNlZAorLSBpdGVtICAgIDogU3VwZXIgSG9vcAorICBxdWFudGl0eTogMQorLSBpdGVtICAgIDogQmFza2V0YmFsbAorICBxdWFudGl0eTogNAorLSBpdGVtICAgIDogQmlnIFNob2VzCisgIHF1YW50aXR5OiAxCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMTIuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTEyLnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWM1MzU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTEyLnN0cnVjdHVyZQpAQCAtMCwwICsxLDUgQEAKK1sKK1soVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0sCitbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSldLAorWyhUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXSwKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMi50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTIudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjFlNTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTIudG9rZW5zCkBAIC0wLDAgKzEsNiBAQAorLS0tCitbWworLCB7eyA/IF8gOiBfID8gXyA6IF8gXX0KKywge3sgPyBfIDogXyA/IF8gOiBfIF19CissIHt7ID8gXyA6IF8gPyBfIDogXyBdfQorXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMy5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTEzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmYjY1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMy5kYXRhCkBAIC0wLDAgKzEsNCBAQAorIyBBU0NJSSBBcnQKKy0tLSB8CisgIFwvL3x8XC98fAorICAvLyB8fCAgfHxfXwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTEzLnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMy5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhOTUxNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMy5zdHJ1Y3R1cmUKQEAgLTAsMCArMSBAQAorVHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTEzLnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMy50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1NmMwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xMy50b2tlbnMKQEAgLTAsMCArMSBAQAorLS0tIF8KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5NDNkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNC5kYXRhCkBAIC0wLDAgKzEsNCBAQAorLS0tCisgIE1hcmsgTWNHd2lyZSdzCisgIHllYXIgd2FzIGNyaXBwbGVkCisgIGJ5IGEga25lZSBpbmp1cnkuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMTQuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE0LnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2E5NTE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE0LnN0cnVjdHVyZQpAQCAtMCwwICsxIEBACitUcnVlCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMTQudG9rZW5zIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE0LnRva2VucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDU2YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE0LnRva2VucwpAQCAtMCwwICsxIEBACistLS0gXwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTE1LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGI4OWE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE1LmRhdGEKQEAgLTAsMCArMSw4IEBACis+CisgU2FtbXkgU29zYSBjb21wbGV0ZWQgYW5vdGhlcgorIGZpbmUgc2Vhc29uIHdpdGggZ3JlYXQgc3RhdHMuCisKKyAgIDYzIEhvbWUgUnVucworICAgMC4yODggQmF0dGluZyBBdmVyYWdlCisKKyBXaGF0IGEgeWVhciEKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNS5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTUuc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTk1MTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTUuc3RydWN0dXJlCkBAIC0wLDAgKzEgQEAKK1RydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNS50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTUudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzU0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTUudG9rZW5zCkBAIC0wLDAgKzEgQEAKK18KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE2LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2NmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNi5kYXRhCkBAIC0wLDAgKzEsNyBAQAorbmFtZTogTWFyayBNY0d3aXJlCithY2NvbXBsaXNobWVudDogPgorICBNYXJrIHNldCBhIG1ham9yIGxlYWd1ZQorICBob21lIHJ1biByZWNvcmQgaW4gMTk5OC4KK3N0YXRzOiB8CisgIDY1IEhvbWUgUnVucworICAwLjI3OCBCYXR0aW5nIEF2ZXJhZ2UKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNi5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTYuc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYTFjZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTYuc3RydWN0dXJlCkBAIC0wLDAgKzEgQEAKK1soVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTE2LnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNi50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlMzgxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNi50b2tlbnMKQEAgLTAsMCArMSw1IEBACit7eworPyBfIDogXworPyBfIDogXworPyBfIDogXworXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNy5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE3LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4NzBjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNy5kYXRhCkBAIC0wLDAgKzEsNyBAQAordW5pY29kZTogIlNvc2EgZGlkIGZpbmUuXHUyNjNBIgorY29udHJvbDogIlxiMTk5OFx0MTk5OVx0MjAwMFxuIgoraGV4ZXNjOiAgIlx4MTNceDEwIGlzIFxyXG4iCisKK3NpbmdsZTogJyJIb3dkeSEiIGhlIGNyaWVkLicKK3F1b3RlZDogJyAjIG5vdCBhICcnY29tbWVudCcnLicKK3RpZS1maWdodGVyOiAnfFwtKi0vfCcKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNy5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTcuc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzY0NmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTcuc3RydWN0dXJlCkBAIC0wLDAgKzEgQEAKK1soVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTE3LnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNy50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NTU0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xNy50b2tlbnMKQEAgLTAsMCArMSw4IEBACit7eworPyBfIDogXworPyBfIDogXworPyBfIDogXworPyBfIDogXworPyBfIDogXworPyBfIDogXworXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE4LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhOGJmYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOC5kYXRhCkBAIC0wLDAgKzEsNiBAQAorcGxhaW46CisgIFRoaXMgdW5xdW90ZWQgc2NhbGFyCisgIHNwYW5zIG1hbnkgbGluZXMuCisKK3F1b3RlZDogIlNvIGRvZXMgdGhpcworICBxdW90ZWQgc2NhbGFyLlxuIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTE4LnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOC5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhNDk5MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOC5zdHJ1Y3R1cmUKQEAgLTAsMCArMSBAQAorWyhUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTE4LnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOC50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiMzFkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOC50b2tlbnMKQEAgLTAsMCArMSw0IEBACit7eworPyBfIDogXworPyBfIDogXworXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTE5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2OWRlNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOS5kYXRhCkBAIC0wLDAgKzEsNSBAQAorY2Fub25pY2FsOiAxMjM0NQorZGVjaW1hbDogKzEyLDM0NQorc2V4YWdlc2ltYWw6IDM6MjU6NDUKK29jdGFsOiAwMTQKK2hleGFkZWNpbWFsOiAweEMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOS5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTkuc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Y2E5OWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTkuc3RydWN0dXJlCkBAIC0wLDAgKzEgQEAKK1soVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0xOS50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTkudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZGE2OGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMTkudG9rZW5zCkBAIC0wLDAgKzEsNyBAQAore3sKKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6IF8KK119CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMjAuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNDg5N2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjAuZGF0YQpAQCAtMCwwICsxLDYgQEAKK2Nhbm9uaWNhbDogMS4yMzAxNWUrMworZXhwb25lbnRpYWw6IDEyLjMwMTVlKzAyCitzZXhhZ2VzaW1hbDogMjA6MzAuMTUKK2ZpeGVkOiAxLDIzMC4xNQorbmVnYXRpdmUgaW5maW5pdHk6IC0uaW5mCitub3QgYSBudW1iZXI6IC5OYU4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMC5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjAuc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzY0NmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjAuc3RydWN0dXJlCkBAIC0wLDAgKzEgQEAKK1soVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTIwLnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMC50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NTU0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMC50b2tlbnMKQEAgLTAsMCArMSw4IEBACit7eworPyBfIDogXworPyBfIDogXworPyBfIDogXworPyBfIDogXworPyBfIDogXworPyBfIDogXworXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTIxLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjNmE1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMS5kYXRhCkBAIC0wLDAgKzEsNCBAQAorbnVsbDogfgordHJ1ZTogeQorZmFsc2U6IG4KK3N0cmluZzogJzEyMzQ1JwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTIxLnN0cnVjdHVyZSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMS5zdHJ1Y3R1cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNjM1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMS5zdHJ1Y3R1cmUKQEAgLTAsMCArMSBAQAorWyhUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMS50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjEudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlY2NiYWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjEudG9rZW5zCkBAIC0wLDAgKzEsNiBAQAore3sKKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6IF8KK119CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMjIuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYWMxODUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjIuZGF0YQpAQCAtMCwwICsxLDQgQEAKK2Nhbm9uaWNhbDogMjAwMS0xMi0xNVQwMjo1OTo0My4xWgoraXNvODYwMTogMjAwMS0xMi0xNHQyMTo1OTo0My4xMC0wNTowMAorc3BhY2VkOiAyMDAxLTEyLTE0IDIxOjU5OjQzLjEwIC01CitkYXRlOiAyMDAyLTEyLTE0CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMjIuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTIyLnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE2MzVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTIyLnN0cnVjdHVyZQpAQCAtMCwwICsxIEBACitbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTIyLnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMi50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjY2JhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMi50b2tlbnMKQEAgLTAsMCArMSw2IEBACit7eworPyBfIDogXworPyBfIDogXworPyBfIDogXworPyBfIDogXworXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMy5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTIzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiZDk5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMy5kYXRhCkBAIC0wLDAgKzEsMTMgQEAKKy0tLQorbm90LWRhdGU6ICEhc3RyIDIwMDItMDQtMjgKKworcGljdHVyZTogISFiaW5hcnkgfAorIFIwbEdPRGxoREFBTUFJUUFBUC8vOS9YCisgMTd1bnA1V1ptWmdBQUFPZm41MTVlWHYKKyBQejdZNk9qdURnNEorZm41T1RrNmVucAorIDU2ZW5tbGVFQ2NnZ2dvQkFEcz0KKworYXBwbGljYXRpb24gc3BlY2lmaWMgdGFnOiAhc29tZXRoaW5nIHwKKyBUaGUgc2VtYW50aWNzIG9mIHRoZSB0YWcKKyBhYm92ZSBtYXkgYmUgZGlmZmVyZW50IGZvcgorIGRpZmZlcmVudCBkb2N1bWVudHMuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMjMuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTIzLnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmExY2VkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTIzLnN0cnVjdHVyZQpAQCAtMCwwICsxIEBACitbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yMy50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjMudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzU0YWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjMudG9rZW5zCkBAIC0wLDAgKzEsNiBAQAorLS0tCit7eworPyBfIDogISBfCis/IF8gOiAhIF8KKz8gXyA6ICEgXworXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTI0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4MDc1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNC5kYXRhCkBAIC0wLDAgKzEsMTQgQEAKKyVUQUcgISB0YWc6Y2xhcmtldmFucy5jb20sMjAwMjoKKy0tLSAhc2hhcGUKKyAgIyBVc2UgdGhlICEgaGFuZGxlIGZvciBwcmVzZW50aW5nCisgICMgdGFnOmNsYXJrZXZhbnMuY29tLDIwMDI6Y2lyY2xlCistICFjaXJjbGUKKyAgY2VudGVyOiAmT1JJR0lOIHt4OiA3MywgeTogMTI5fQorICByYWRpdXM6IDcKKy0gIWxpbmUKKyAgc3RhcnQ6ICpPUklHSU4KKyAgZmluaXNoOiB7IHg6IDg5LCB5OiAxMDIgfQorLSAhbGFiZWwKKyAgc3RhcnQ6ICpPUklHSU4KKyAgY29sb3I6IDB4RkZFRUJCCisgIHRleHQ6IFByZXR0eSB2ZWN0b3IgZHJhd2luZy4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNC5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjQuc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDA3MjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjQuc3RydWN0dXJlCkBAIC0wLDAgKzEsNSBAQAorWworWyhUcnVlLCBbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSldKSwgKFRydWUsIFRydWUpXSwKK1soVHJ1ZSwgJyonKSwgKFRydWUsIFsoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0pXSwKK1soVHJ1ZSwgJyonKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSldLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTI0LnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNC50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5YzM4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNC50b2tlbnMKQEAgLTAsMCArMSwyMCBAQAorJQorLS0tICEKK1tbCissICEKKyAgICB7eworICAgID8gXyA6ICYgeyA/IF8gOiBfICwgPyBfIDogXyB9CisgICAgPyBfIDogXworICAgIF19CissICEKKyAgICB7eworICAgID8gXyA6ICoKKyAgICA/IF8gOiB7ID8gXyA6IF8gLCA/IF8gOiBfIH0KKyAgICBdfQorLCAhCisgICAge3sKKyAgICA/IF8gOiAqCisgICAgPyBfIDogXworICAgID8gXyA6IF8KKyAgICBdfQorXX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTI1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5YWMzMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNS5kYXRhCkBAIC0wLDAgKzEsNyBAQAorIyBzZXRzIGFyZSByZXByZXNlbnRlZCBhcyBhCisjIG1hcHBpbmcgd2hlcmUgZWFjaCBrZXkgaXMKKyMgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbXB0eSBzdHJpbmcKKy0tLSAhIXNldAorPyBNYXJrIE1jR3dpcmUKKz8gU2FtbXkgU29zYQorPyBLZW4gR3JpZmYKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNS5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjUuc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNDBlNjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjUuc3RydWN0dXJlCkBAIC0wLDAgKzEgQEAKK1soVHJ1ZSwgTm9uZSksIChUcnVlLCBOb25lKSwgKFRydWUsIE5vbmUpXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTI1LnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNS50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwMDIzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNS50b2tlbnMKQEAgLTAsMCArMSw2IEBACistLS0gIQore3sKKz8gXworPyBfCis/IF8KK119CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMjYuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNDM3NjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjYuZGF0YQpAQCAtMCwwICsxLDcgQEAKKyMgb3JkZXJlZCBtYXBzIGFyZSByZXByZXNlbnRlZCBhcworIyBhIHNlcXVlbmNlIG9mIG1hcHBpbmdzLCB3aXRoCisjIGVhY2ggbWFwcGluZyBoYXZpbmcgb25lIGtleQorLS0tICEhb21hcAorLSBNYXJrIE1jR3dpcmU6IDY1CistIFNhbW15IFNvc2E6IDYzCistIEtlbiBHcmlmZnk6IDU4CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMjYuc3RydWN0dXJlIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTI2LnN0cnVjdHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQyOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTI2LnN0cnVjdHVyZQpAQCAtMCwwICsxLDUgQEAKK1sKK1soVHJ1ZSwgVHJ1ZSldLAorWyhUcnVlLCBUcnVlKV0sCitbKFRydWUsIFRydWUpXSwKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNi50b2tlbnMgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjYudG9rZW5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZWU0OTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjYudG9rZW5zCkBAIC0wLDAgKzEsNiBAQAorLS0tICEKK1tbCissIHt7ID8gXyA6IF8gXX0KKywge3sgPyBfIDogXyBdfQorLCB7eyA/IF8gOiBfIF19CitdfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTI3LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjI1NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTI3LmRhdGEKQEAgLTAsMCArMSwyOSBAQAorLS0tICE8dGFnOmNsYXJrZXZhbnMuY29tLDIwMDI6aW52b2ljZT4KK2ludm9pY2U6IDM0ODQzCitkYXRlICAgOiAyMDAxLTAxLTIzCitiaWxsLXRvOiAmaWQwMDEKKyAgICBnaXZlbiAgOiBDaHJpcworICAgIGZhbWlseSA6IER1bWFycworICAgIGFkZHJlc3M6CisgICAgICAgIGxpbmVzOiB8CisgICAgICAgICAgICA0NTggV2Fsa21hbiBEci4KKyAgICAgICAgICAgIFN1aXRlICMyOTIKKyAgICAgICAgY2l0eSAgICA6IFJveWFsIE9haworICAgICAgICBzdGF0ZSAgIDogTUkKKyAgICAgICAgcG9zdGFsICA6IDQ4MDQ2CitzaGlwLXRvOiAqaWQwMDEKK3Byb2R1Y3Q6CisgICAgLSBza3UgICAgICAgICA6IEJMMzk0RAorICAgICAgcXVhbnRpdHkgICAgOiA0CisgICAgICBkZXNjcmlwdGlvbiA6IEJhc2tldGJhbGwKKyAgICAgIHByaWNlICAgICAgIDogNDUwLjAwCisgICAgLSBza3UgICAgICAgICA6IEJMNDQzOEgKKyAgICAgIHF1YW50aXR5ICAgIDogMQorICAgICAgZGVzY3JpcHRpb24gOiBTdXBlciBIb29wCisgICAgICBwcmljZSAgICAgICA6IDIzOTIuMDAKK3RheCAgOiAyNTEuNDIKK3RvdGFsOiA0NDQzLjUyCitjb21tZW50czoKKyAgICBMYXRlIGFmdGVybm9vbiBpcyBiZXN0LgorICAgIEJhY2t1cCBjb250YWN0IGlzIE5hbmN5CisgICAgQmlsbHNtZXIgQCAzMzgtNDMzOC4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yNy5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjcuc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTEzYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjcuc3RydWN0dXJlCkBAIC0wLDAgKzEsMTcgQEAKK1sKKyhUcnVlLCBUcnVlKSwKKyhUcnVlLCBUcnVlKSwKKyhUcnVlLCBbCisgICAgKFRydWUsIFRydWUpLAorICAgIChUcnVlLCBUcnVlKSwKKyAgICAoVHJ1ZSwgWyhUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0pLAorICAgIF0pLAorKFRydWUsICcqJyksCisoVHJ1ZSwgWworICAgICAgICBbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXSwKKyAgICAgICAgWyhUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0sCisgICAgXSksCisoVHJ1ZSwgVHJ1ZSksCisoVHJ1ZSwgVHJ1ZSksCisoVHJ1ZSwgVHJ1ZSksCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMjcudG9rZW5zIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTI3LnRva2VucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGMxYzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTAyLTI3LnRva2VucwpAQCAtMCwwICsxLDIwIEBACistLS0gIQore3sKKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6ICYKKyAgICB7eworICAgID8gXyA6IF8KKyAgICA/IF8gOiBfCisgICAgPyBfIDoge3sgPyBfIDogXyA/IF8gOiBfID8gXyA6IF8gPyBfIDogXyBdfQorICAgIF19Cis/IF8gOiAqCis/IF8gOgorICAgIFtbCisgICAgLCB7eyA/IF8gOiBfID8gXyA6IF8gPyBfIDogXyA/IF8gOiBfIF19CisgICAgLCB7eyA/IF8gOiBfID8gXyA6IF8gPyBfIDogXyA/IF8gOiBfIF19CisgICAgXX0KKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6IF8KK119CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDItMjguZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yOC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YzhkYzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjguZGF0YQpAQCAtMCwwICsxLDI2IEBACistLS0KK1RpbWU6IDIwMDEtMTEtMjMgMTU6MDE6NDIgLTUKK1VzZXI6IGVkCitXYXJuaW5nOgorICBUaGlzIGlzIGFuIGVycm9yIG1lc3NhZ2UKKyAgZm9yIHRoZSBsb2cgZmlsZQorLS0tCitUaW1lOiAyMDAxLTExLTIzIDE1OjAyOjMxIC01CitVc2VyOiBlZAorV2FybmluZzoKKyAgQSBzbGlnaHRseSBkaWZmZXJlbnQgZXJyb3IKKyAgbWVzc2FnZS4KKy0tLQorRGF0ZTogMjAwMS0xMS0yMyAxNTowMzoxNyAtNQorVXNlcjogZWQKK0ZhdGFsOgorICBVbmtub3duIHZhcmlhYmxlICJiYXIiCitTdGFjazoKKyAgLSBmaWxlOiBUb3BDbGFzcy5weQorICAgIGxpbmU6IDIzCisgICAgY29kZTogfAorICAgICAgeCA9IE1vcmVPYmplY3QoIjM0NVxuIikKKyAgLSBmaWxlOiBNb3JlQ2xhc3MucHkKKyAgICBsaW5lOiA1OAorICAgIGNvZGU6IHwtCisgICAgICBmb28gPSBiYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wMi0yOC5zdHJ1Y3R1cmUgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjguc3RydWN0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzBiNTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDItMjguc3RydWN0dXJlCkBAIC0wLDAgKzEsMTAgQEAKK1sKK1soVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXSwKK1soVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpXSwKK1soVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLAorKFRydWUsIFsKKyAgICBbKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSksIChUcnVlLCBUcnVlKV0sCisgICAgWyhUcnVlLCBUcnVlKSwgKFRydWUsIFRydWUpLCAoVHJ1ZSwgVHJ1ZSldLAorICAgIF0pLAorXQorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTAyLTI4LnRva2VucyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yOC50b2tlbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1ZTFiYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wMi0yOC50b2tlbnMKQEAgLTAsMCArMSwyMyBAQAorLS0tCit7eworPyBfIDogXworPyBfIDogXworPyBfIDogXworXX0KKy0tLQore3sKKz8gXyA6IF8KKz8gXyA6IF8KKz8gXyA6IF8KK119CistLS0KK3t7Cis/IF8gOiBfCis/IF8gOiBfCis/IF8gOiBfCis/IF8gOgorICAgIFtbCisgICAgICAgICwge3sgPyBfIDogXyA/IF8gOiBfID8gXyA6IF8gXX0KKyAgICAgICAgLCB7eyA/IF8gOiBfID8gXyA6IF8gPyBfIDogXyBdfQorICAgIF19CitdfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTAxLXV0ZjE2YmUuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMS11dGYxNmJlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyNTA2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMS11dGYxNmJlLmRhdGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTAxLXV0ZjE2YmUuZW1wdHkgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDEtdXRmMTZiZS5lbXB0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmZmYThiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAxLXV0ZjE2YmUuZW1wdHkKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgc3RyZWFtIGNvbnRhaW5zIG5vCisjIGRvY3VtZW50cywgb25seSBjb21tZW50cy4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMS11dGYxNmxlLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDEtdXRmMTZsZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjNmNzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDEtdXRmMTZsZS5kYXRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMS11dGYxNmxlLmVtcHR5IGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAxLXV0ZjE2bGUuZW1wdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmZmE4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMS11dGYxNmxlLmVtcHR5CkBAIC0wLDAgKzEsMiBAQAorIyBUaGlzIHN0cmVhbSBjb250YWlucyBubworIyBkb2N1bWVudHMsIG9ubHkgY29tbWVudHMuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMDEtdXRmOC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAxLXV0ZjguZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODBkMjViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAxLXV0ZjguZGF0YQpAQCAtMCwwICsxIEBACivvu78jIENvbW1lbnQgb25seS4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMS11dGY4LmVtcHR5IGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAxLXV0ZjguZW1wdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmZmE4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMS11dGY4LmVtcHR5CkBAIC0wLDAgKzEsMiBAQAorIyBUaGlzIHN0cmVhbSBjb250YWlucyBubworIyBkb2N1bWVudHMsIG9ubHkgY29tbWVudHMuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMDItdXRmMTZiZS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAyLXV0ZjE2YmUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJiYjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAyLXV0ZjE2YmUuZGF0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMDItdXRmMTZiZS5lcnJvciBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMi11dGYxNmJlLmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjM2MTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDItdXRmMTZiZS5lcnJvcgpAQCAtMCwwICsxLDMgQEAKK0VSUk9SOgorIEEgQk9NIG11c3Qgbm90IGFwcGVhcgorIGluc2lkZSBhIGRvY3VtZW50LgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTAyLXV0ZjE2bGUuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMi11dGYxNmxlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkOTBhMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMi11dGYxNmxlLmRhdGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTAyLXV0ZjE2bGUuZXJyb3IgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDItdXRmMTZsZS5lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGYzNjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAyLXV0ZjE2bGUuZXJyb3IKQEAgLTAsMCArMSwzIEBACitFUlJPUjoKKyBBIEJPTSBtdXN0IG5vdCBhcHBlYXIKKyBpbnNpZGUgYSBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMi11dGY4LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDItdXRmOC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzQ4NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDItdXRmOC5kYXRhCkBAIC0wLDAgKzEsMyBAQAorIyBJbnZhbGlkIHVzZSBvZiBCT00KK++7vyMgaW5zaWRlIGEKKyMgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMDItdXRmOC5lcnJvciBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMi11dGY4LmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjM2MTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDItdXRmOC5lcnJvcgpAQCAtMCwwICsxLDMgQEAKK0VSUk9SOgorIEEgQk9NIG11c3Qgbm90IGFwcGVhcgorIGluc2lkZSBhIGRvY3VtZW50LgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTAzLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0M2E3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wMy5jYW5vbmljYWwKQEAgLTAsMCArMSwxNCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAic2VxdWVuY2UiCisgIDogISFzZXEgWworICAgICEhc3RyICJvbmUiLCAhIXN0ciAidHdvIgorICBdLAorICA/ICEhc3RyICJtYXBwaW5nIgorICA6ICEhbWFwIHsKKyAgICA/ICEhc3RyICJza3kiIDogISFzdHIgImJsdWUiLAorIyAgICA/ICEhc3RyICJzZWEiIDogISFzdHIgImdyZWVuIiwKKyAgICA/ICEhbWFwIHsgPyAhIXN0ciAic2VhIiA6ICEhc3RyICJncmVlbiIgfSA6ICEhbnVsbCAiIiwKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTAzLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjYxZjMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTAzLmRhdGEKQEAgLTAsMCArMSw3IEBACitzZXF1ZW5jZToKKy0gb25lCistIHR3bworbWFwcGluZzoKKyAgPyBza3kKKyAgOiBibHVlCisgID8gc2VhIDogZ3JlZW4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNC5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDQuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzk3MjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDQuY2Fub25pY2FsCkBAIC0wLDAgKzEsMTMgQEAKKyVZQU1MIDEuMQorLS0tCishIW1hcCB7CisgID8gISFzdHIgInNlcXVlbmNlIgorICA6ICEhc2VxIFsKKyAgICAhIXN0ciAib25lIiwgISFzdHIgInR3byIKKyAgXSwKKyAgPyAhIXN0ciAibWFwcGluZyIKKyAgOiAhIW1hcCB7CisgICAgPyAhIXN0ciAic2t5IiA6ICEhc3RyICJibHVlIiwKKyAgICA/ICEhc3RyICJzZWEiIDogISFzdHIgImdyZWVuIiwKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTA0LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjMzODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTA0LmRhdGEKQEAgLTAsMCArMSwyIEBACitzZXF1ZW5jZTogWyBvbmUsIHR3bywgXQorbWFwcGluZzogeyBza3k6IGJsdWUsIHNlYTogZ3JlZW4gfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTA1LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjUyNGMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTA1LmRhdGEKQEAgLTAsMCArMSBAQAorIyBDb21tZW50IG9ubHkuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMDUuZW1wdHkgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDUuZW1wdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmZmE4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNS5lbXB0eQpAQCAtMCwwICsxLDIgQEAKKyMgVGhpcyBzdHJlYW0gY29udGFpbnMgbm8KKyMgZG9jdW1lbnRzLCBvbmx5IGNvbW1lbnRzLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTA2LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzMGMxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNi5jYW5vbmljYWwKQEAgLTAsMCArMSw4IEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICEhc3RyICJhbmNob3JlZCIKKyAgOiAmQTEgIWxvY2FsICJ2YWx1ZSIsCisgID8gISFzdHIgImFsaWFzIgorICA6ICpBMSwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTA2LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExZjliMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNi5kYXRhCkBAIC0wLDAgKzEsMiBAQAorYW5jaG9yZWQ6ICFsb2NhbCAmYW5jaG9yIHZhbHVlCithbGlhczogKmFuY2hvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTA3LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzNzMyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNy5jYW5vbmljYWwKQEAgLTAsMCArMSw4IEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICEhc3RyICJsaXRlcmFsIgorICA6ICEhc3RyICJ0ZXh0XG4iLAorICA/ICEhc3RyICJmb2xkZWQiCisgIDogISFzdHIgInRleHRcbiIsCit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMDcuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wNy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZWIzYTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDcuZGF0YQpAQCAtMCwwICsxLDQgQEAKK2xpdGVyYWw6IHwKKyAgdGV4dAorZm9sZGVkOiA+CisgIHRleHQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wOC5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDguY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMGJkNjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMDguY2Fub25pY2FsCkBAIC0wLDAgKzEsOCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAic2luZ2xlIgorICA6ICEhc3RyICJ0ZXh0IiwKKyAgPyAhIXN0ciAiZG91YmxlIgorICA6ICEhc3RyICJ0ZXh0IiwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wOC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTA4LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlYmY2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wOC5kYXRhCkBAIC0wLDAgKzEsMiBAQAorc2luZ2xlOiAndGV4dCcKK2RvdWJsZTogInRleHQiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMDkuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTA5LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTdlM2RlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTA5LmNhbm9uaWNhbApAQCAtMCwwICsxLDMgQEAKKyVZQU1MIDEuMQorLS0tCishIXN0ciAidGV4dCIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0wOS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTA5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzNDMxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0wOS5kYXRhCkBAIC0wLDAgKzEsMiBAQAorJVlBTUwgMS4xCistLS0gdGV4dApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTEwLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMTAuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGNhZjkxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTEwLmRhdGEKQEAgLTAsMCArMSwyIEBACitjb21tZXJjaWFsLWF0OiBAdGV4dAorZ3JhdmUtYWNjZW50OiBgdGV4dApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTEwLmVycm9yIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTEwLmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Zjc3NmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMTAuZXJyb3IKQEAgLTAsMCArMSwzIEBACitFUlJPUjoKKyBSZXNlcnZlZCBpbmRpY2F0b3JzIGNhbid0Cisgc3RhcnQgYSBwbGFpbiBzY2FsYXIuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMTEuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTExLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzI1YmVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTExLmNhbm9uaWNhbApAQCAtMCwwICsxLDYgQEAKKyVZQU1MIDEuMQorLS0tICEhc3RyCisiR2VuZXJpYyBsaW5lIGJyZWFrIChubyBnbHlwaClcblwKKyBHZW5lcmljIGxpbmUgYnJlYWsgKGdseXBoZWQpXG5cCisgTGluZSBzZXBhcmF0b3JcdTIwMjhcCisgUGFyYWdyYXBoIHNlcGFyYXRvclx1MjAyOSIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0xMS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTExLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0OGI3NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0xMS5kYXRhCkBAIC0wLDAgKzEsMyBAQAorfAorICBHZW5lcmljIGxpbmUgYnJlYWsgKG5vIGdseXBoKQorICBHZW5lcmljIGxpbmUgYnJlYWsgKGdseXBoZWQpwoUgIExpbmUgc2VwYXJhdG9y4oCoICBQYXJhZ3JhcGggc2VwYXJhdG9y4oCpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTEyLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMTIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzNhZDdmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTEyLmRhdGEKQEAgLTAsMCArMSw5IEBACisjIFRhYnMgZG8ncyBhbmQgZG9uJ3RzOgorIyBjb21tZW50OiAJCitxdW90ZWQ6ICJRdW90ZWQJCSIKK2Jsb2NrOiB8CisgIHZvaWQgbWFpbigpIHsKKyAgCXByaW50ZigiSGVsbG8sIHdvcmxkIVxuIik7CisgIH0KK2Vsc2V3aGVyZToJIyBzZXBhcmF0aW9uCisJaW5kZW50YXRpb24sIGluCXBsYWluIHNjYWxhcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTEyLmVycm9yIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTEyLmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYWQ0YzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMTIuZXJyb3IKQEAgLTAsMCArMSw4IEBACitFUlJPUjoKKyBUYWJzIG1heSBhcHBlYXIgaW5zaWRlCisgY29tbWVudHMgYW5kIHF1b3RlZCBvcgorIGJsb2NrIHNjYWxhciBjb250ZW50LgorIFRhYnMgbXVzdCBub3QgYXBwZWFyCisgZWxzZXdoZXJlLCBzdWNoIGFzCisgaW4gaW5kZW50YXRpb24gYW5kCisgc2VwYXJhdGlvbiBzcGFjZXMuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMTMuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTEzLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGMxYzVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTEzLmNhbm9uaWNhbApAQCAtMCwwICsxLDUgQEAKKyVZQU1MIDEuMQorLS0tICEhc3RyCisiVGV4dCBjb250YWluaW5nIFwKKyBib3RoIHNwYWNlIGFuZCBcCisgdGFiCWNoYXJhY3RlcnMiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMTMuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0xMy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZTc5NTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMTMuZGF0YQpAQCAtMCwwICsxLDMgQEAKKyAgIlRleHQgY29udGFpbmluZyAgIAorICBib3RoIHNwYWNlIGFuZAkKKyAgCXRhYgljaGFyYWN0ZXJzIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTE0LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0xNC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmZjAxYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0xNC5jYW5vbmljYWwKQEAgLTAsMCArMSw3IEBACislWUFNTCAxLjEKKy0tLQorIkZ1biB3aXRoIFx4NUMKKyBceDIyIFx4MDcgXHgwOCBceDFCIFx4MEMKKyBceDBBIFx4MEQgXHgwOSBceDBCIFx4MDAKKyBceDIwIFx4QTAgXHg4NSBcdTIwMjggXHUyMDI5CisgQSBBIEEiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDUtMTQuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0xNC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZThjZTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMTQuZGF0YQpAQCAtMCwwICsxLDIgQEAKKyJGdW4gd2l0aCBcXAorIFwiIFxhIFxiIFxlIFxmIFzChSBcbiBcciBcdCBcdiBcMCBc4oCoIFwgIFxfIFxOIFxMIFxQIFzigKkgXHg0MSBcdTAwNDEgXFUwMDAwMDA0MSIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNS0xNS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTE1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmMTJiNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNS0xNS5kYXRhCkBAIC0wLDAgKzEsMyBAQAorQmFkIGVzY2FwZXM6CisgICJcYworICBceHEtIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA1LTE1LmVycm9yIGIvdGVzdHMvZGF0YS9zcGVjLTA1LTE1LmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZmZiZDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDUtMTUuZXJyb3IKQEAgLTAsMCArMSwzIEBACitFUlJPUjoKKy0gYyBpcyBhbiBpbnZhbGlkIGVzY2FwZWQgY2hhcmFjdGVyLgorLSBxIGFuZCAtIGFyZSBpbnZhbGlkIGhleCBkaWdpdHMuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDYtMDEuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTAxLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTdlYzkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTAxLmNhbm9uaWNhbApAQCAtMCwwICsxLDE1IEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICEhc3RyICJOb3QgaW5kZW50ZWQiCisgIDogISFtYXAgeworICAgICAgPyAhIXN0ciAiQnkgb25lIHNwYWNlIgorICAgICAgOiAhIXN0ciAiQnkgZm91clxuICBzcGFjZXNcbiIsCisgICAgICA/ICEhc3RyICJGbG93IHN0eWxlIgorICAgICAgOiAhIXNlcSBbCisgICAgICAgICAgISFzdHIgIkJ5IHR3byIsCisgICAgICAgICAgISFzdHIgIkFsc28gYnkgdHdvIiwKKyAgICAgICAgICAhIXN0ciAiU3RpbGwgYnkgdHdvIiwKKyAgICAgICAgXQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNi0wMS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTAxLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzNGJhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wMS5kYXRhCkBAIC0wLDAgKzEsMTQgQEAKKyAgIyBMZWFkaW5nIGNvbW1lbnQgbGluZSBzcGFjZXMgYXJlCisgICAjIG5laXRoZXIgY29udGVudCBub3IgaW5kZW50YXRpb24uCisgICAgCitOb3QgaW5kZW50ZWQ6CisgQnkgb25lIHNwYWNlOiB8CisgICAgQnkgZm91cgorICAgICAgc3BhY2VzCisgRmxvdyBzdHlsZTogWyAgICAjIExlYWRpbmcgc3BhY2VzCisgICBCeSB0d28sICAgICAgICAjIGluIGZsb3cgc3R5bGUKKyAgQWxzbyBieSB0d28sICAgICMgYXJlIG5laXRoZXIKKyMgVGFicyBhcmUgbm90IGFsbG93ZWQ6CisjICAJU3RpbGwgYnkgdHdvICAgIyBjb250ZW50IG5vcgorICAgIFN0aWxsIGJ5IHR3byAgICMgY29udGVudCBub3IKKyAgICBdICAgICAgICAgICAgICMgaW5kZW50YXRpb24uCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDYtMDIuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wMi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzQxZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDIuZGF0YQpAQCAtMCwwICsxLDMgQEAKKyAgIyBDb21tZW50CisgICAKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA2LTAyLmVtcHR5IGIvdGVzdHMvZGF0YS9zcGVjLTA2LTAyLmVtcHR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZmZhOGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDIuZW1wdHkKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgc3RyZWFtIGNvbnRhaW5zIG5vCisjIGRvY3VtZW50cywgb25seSBjb21tZW50cy4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNi0wMy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDMuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjY5MDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDMuY2Fub25pY2FsCkBAIC0wLDAgKzEsNiBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAia2V5IgorICA6ICEhc3RyICJ2YWx1ZSIKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNi0wMy5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTAzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiMDkxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wMy5kYXRhCkBAIC0wLDAgKzEsMiBAQAora2V5OiAgICAjIENvbW1lbnQKKyAgdmFsdWUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNi0wNC5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDQuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjY5MDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDQuY2Fub25pY2FsCkBAIC0wLDAgKzEsNiBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAia2V5IgorICA6ICEhc3RyICJ2YWx1ZSIKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNi0wNC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTA0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzMDhkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wNC5kYXRhCkBAIC0wLDAgKzEsNCBAQAora2V5OiAgICAjIENvbW1lbnQKKyAgICAgICAgIyBsaW5lcworICB2YWx1ZQorCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDYtMDUuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTA1LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGE0MzFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTA1LmNhbm9uaWNhbApAQCAtMCwwICsxLDE2IEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICEhbWFwIHsKKyAgICA/ICEhc3RyICJmaXJzdCIKKyAgICA6ICEhc3RyICJTYW1teSIsCisgICAgPyAhIXN0ciAibGFzdCIKKyAgICA6ICEhc3RyICJTb3NhIgorICB9CisgIDogISFtYXAgeworICAgID8gISFzdHIgImhyIgorICAgIDogISFpbnQgIjY1IiwKKyAgICA/ICEhc3RyICJhdmciCisgICAgOiAhIWZsb2F0ICIwLjI3OCIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA2LTA1LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzYxM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTA1LmRhdGEKQEAgLTAsMCArMSw2IEBACit7IGZpcnN0OiBTYW1teSwgbGFzdDogU29zYSB9OgorIyBTdGF0aXN0aWNzOgorICBocjogICMgSG9tZSBydW5zCisgICAgNjUKKyAgYXZnOiAjIEF2ZXJhZ2UKKyAgICAwLjI3OApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA2LTA2LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wNi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzZDA3YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wNi5jYW5vbmljYWwKQEAgLTAsMCArMSwxMCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAicGxhaW4iCisgIDogISFzdHIgInRleHQgbGluZXMiLAorICA/ICEhc3RyICJxdW90ZWQiCisgIDogISFzdHIgInRleHQgbGluZXMiLAorICA/ICEhc3RyICJibG9jayIKKyAgOiAhIXN0ciAidGV4dFxuIAlsaW5lc1xuIgorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA2LTA2LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDYuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjYyZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTA2LmRhdGEKQEAgLTAsMCArMSw3IEBACitwbGFpbjogdGV4dAorICBsaW5lcworcXVvdGVkOiAidGV4dAorICAJbGluZXMiCitibG9jazogfAorICB0ZXh0CisgICAJbGluZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNi0wNy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDcuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzU3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDcuY2Fub25pY2FsCkBAIC0wLDAgKzEsNiBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgISFzdHIgImZvb1xuYmFyIiwKKyAgISFzdHIgImZvb1xuXG5iYXIiCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDYtMDcuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wNy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGNmYTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDYtMDcuZGF0YQpAQCAtMCwwICsxLDggQEAKKy0gZm9vCisgCisgIGJhcgorLSB8LQorICBmb28KKyAKKyAgYmFyCisgIApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA2LTA4LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wOC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3MmJjOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wOC5jYW5vbmljYWwKQEAgLTAsMCArMSw1IEBACislWUFNTCAxLjEKKy0tLSAhIXN0cgorInNwZWNpZmljXExcCisgdHJpbW1lZFxuXG5cblwKKyBhcyBzcGFjZSIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNi0wOC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA2LTA4LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4OTZlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNi0wOC5kYXRhCkBAIC0wLDAgKzEsMiBAQAorPi0KKyAgc3BlY2lmaWPigKggIHRyaW1tZWTChSAgwoUgwoXChSAgYXPChSAgc3BhY2UKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wMS5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDEuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOGM0OGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDEuY2Fub25pY2FsCkBAIC0wLDAgKzEsMyBAQAorJVlBTUwgMS4xCistLS0gISFzdHIKKyJmb28iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDEuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wMS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMTNlYjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDEuZGF0YQpAQCAtMCwwICsxLDMgQEAKKyVGT08gIGJhciBiYXogIyBTaG91bGQgYmUgaWdub3JlZAorICAgICAgICAgICAgICAgIyB3aXRoIGEgd2FybmluZy4KKy0tLSAiZm9vIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA3LTAxLnNraXAtZXh0IGIvdGVzdHMvZGF0YS9zcGVjLTA3LTAxLnNraXAtZXh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDEuc2tpcC1leHQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wMi5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDIuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiN2RkMWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDIuY2Fub25pY2FsCkBAIC0wLDAgKzEsMyBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmb28iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDIuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wMi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjczMjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDIuZGF0YQpAQCAtMCwwICsxLDQgQEAKKyVZQU1MIDEuMiAjIEF0dGVtcHQgcGFyc2luZworICAgICAgICAgICAjIHdpdGggYSB3YXJuaW5nCistLS0KKyJmb28iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDIuc2tpcC1leHQgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDIuc2tpcC1leHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wMi5za2lwLWV4dApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA3LTAzLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZhMDdhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTAzLmRhdGEKQEAgLTAsMCArMSwzIEBACislWUFNTCAxLjEKKyVZQU1MIDEuMQorZm9vCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDMuZXJyb3IgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDMuZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhYzQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wMy5lcnJvcgpAQCAtMCwwICsxLDMgQEAKK0VSUk9SOgorVGhlIFlBTUwgZGlyZWN0aXZlIG11c3Qgb25seSBiZQorZ2l2ZW4gYXQgbW9zdCBvbmNlIHBlciBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wNC5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDQuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiN2RkMWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDQuY2Fub25pY2FsCkBAIC0wLDAgKzEsMyBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmb28iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDQuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wNC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZjVhYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDQuZGF0YQpAQCAtMCwwICsxLDMgQEAKKyVUQUcgIXlhbWwhIHRhZzp5YW1sLm9yZywyMDAyOgorLS0tCisheWFtbCFzdHIgImZvbyIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wNS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTA1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3NmVhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wNS5kYXRhCkBAIC0wLDAgKzEsMyBAQAorJVRBRyAhICFmb28KKyVUQUcgISAhZm9vCitiYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wNS5lcnJvciBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wNS5lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjAxYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTA1LmVycm9yCkBAIC0wLDAgKzEsNCBAQAorRVJST1I6CitUaGUgVEFHIGRpcmVjdGl2ZSBtdXN0IG9ubHkKK2JlIGdpdmVuIGF0IG1vc3Qgb25jZSBwZXIKK2hhbmRsZSBpbiB0aGUgc2FtZSBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wNi5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDYuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZGY2MTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDYuY2Fub25pY2FsCkBAIC0wLDAgKzEsNiBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgITwhZm9vYmFyPiAiYmF6IiwKKyAgITx0YWc6eWFtbC5vcmcsMjAwMjpzdHI+ICJzdHJpbmciCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDYuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wNi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ODU0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDYuZGF0YQpAQCAtMCwwICsxLDUgQEAKKyVUQUcgISAgICAgICFmb28KKyVUQUcgIXlhbWwhIHRhZzp5YW1sLm9yZywyMDAyOgorLS0tCistICFiYXIgImJheiIKKy0gIXlhbWwhc3RyICJzdHJpbmciCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDdhLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wN2EuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMDg2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDdhLmNhbm9uaWNhbApAQCAtMCwwICsxLDMgQEAKKyVZQU1MIDEuMQorLS0tCishPCFmb28+ICJiYXIiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDdhLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDdhLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0MmVjMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wN2EuZGF0YQpAQCAtMCwwICsxLDIgQEAKKyMgUHJpdmF0ZSBhcHBsaWNhdGlvbjoKKyFmb28gImJhciIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wN2IuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTA3Yi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5MTdkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wN2IuY2Fub25pY2FsCkBAIC0wLDAgKzEsMyBAQAorJVlBTUwgMS4xCistLS0KKyE8dGFnOmJlbi1raWtpLm9yZywyMDAwOmFwcC9mb28+ICJiYXIiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMDdiLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDdiLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzNmQwZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0wN2IuZGF0YQpAQCAtMCwwICsxLDQgQEAKKyMgTWlncmF0ZWQgdG8gZ2xvYmFsOgorJVRBRyAhIHRhZzpiZW4ta2lraS5vcmcsMjAwMDphcHAvCistLS0KKyFmb28gImJhciIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wOC5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDguY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2FhN2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDguY2Fub25pY2FsCkBAIC0wLDAgKzEsNyBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgITwhZm9vPiAiYmFyIiwKKyAgITx0YWc6eWFtbC5vcmcsMjAwMjpzdHI+ICJzdHJpbmciLAorICAhPHRhZzpiZW4ta2lraS5vcmcsMjAwMDp0eXBlPiAiYmF6IgorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA3LTA4LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDguZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmM2ZDllCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTA4LmRhdGEKQEAgLTAsMCArMSw5IEBACisjIEV4cGxpY2l0bHkgc3BlY2lmeSBkZWZhdWx0IHNldHRpbmdzOgorJVRBRyAhICAgICAhCislVEFHICEhICAgIHRhZzp5YW1sLm9yZywyMDAyOgorIyBOYW1lZCBoYW5kbGVzIGhhdmUgbm8gZGVmYXVsdDoKKyVUQUcgIW8hIHRhZzpiZW4ta2lraS5vcmcsMjAwMDoKKy0tLQorLSAhZm9vICJiYXIiCistICEhc3RyICJzdHJpbmciCistICFvIXR5cGUgImJheiIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0wOS5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDkuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDllOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDkuY2Fub25pY2FsCkBAIC0wLDAgKzEsOSBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmb28iCislWUFNTCAxLjEKKy0tLQorISFzdHIgImJhciIKKyVZQU1MIDEuMQorLS0tCishIXN0ciAiYmF6IgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA3LTA5LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDctMDkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA5ZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTA5LmRhdGEKQEAgLTAsMCArMSwxMSBAQAorLS0tCitmb28KKy4uLgorIyBSZXBlYXRlZCBlbmQgbWFya2VyLgorLi4uCistLS0KK2JhcgorIyBObyBlbmQgbWFya2VyLgorLS0tCitiYXoKKy4uLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA3LTEwLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0xMC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiNjUwYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0xMC5jYW5vbmljYWwKQEAgLTAsMCArMSwxNSBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJSb290IGZsb3cgc2NhbGFyIgorJVlBTUwgMS4xCistLS0KKyEhc3RyICJSb290IGJsb2NrIHNjYWxhclxuIgorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiZm9vIgorICA6ICEhc3RyICJiYXIiCit9CistLS0KKyMhIXN0ciAiIgorISFudWxsICIiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMTAuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0xMC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzliMzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMTAuZGF0YQpAQCAtMCwwICsxLDExIEBACisiUm9vdCBmbG93Cisgc2NhbGFyIgorLS0tICEhc3RyID4KKyBSb290IGJsb2NrCisgc2NhbGFyCistLS0KKyMgUm9vdCBjb2xsZWN0aW9uOgorZm9vIDogYmFyCisuLi4gIyBJcyBvcHRpb25hbC4KKy0tLQorIyBFeHBsaWNpdCBkb2N1bWVudCBtYXkgYmUgZW1wdHkuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMTEuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0xMS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTMwMmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMTEuZGF0YQpAQCAtMCwwICsxLDIgQEAKK++7vyMgQSBzdHJlYW0gbWF5IGNvbnRhaW4KKyMgbm8gZG9jdW1lbnRzLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA3LTExLmVtcHR5IGIvdGVzdHMvZGF0YS9zcGVjLTA3LTExLmVtcHR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZmZhOGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMTEuZW1wdHkKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgc3RyZWFtIGNvbnRhaW5zIG5vCisjIGRvY3VtZW50cywgb25seSBjb21tZW50cy4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wNy0xMmEuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTEyYS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjMTE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0xMmEuY2Fub25pY2FsCkBAIC0wLDAgKzEsNiBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiZm9vIgorICA6ICEhc3RyICJiYXIiCit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMTJhLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDctMTJhLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwN2Q1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0xMmEuZGF0YQpAQCAtMCwwICsxLDMgQEAKKyMgSW1wbGljaXQgZG9jdW1lbnQuIFJvb3QKKyMgY29sbGVjdGlvbiAobWFwcGluZykgbm9kZS4KK2ZvbyA6IGJhcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA3LTEyYi5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDctMTJiLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGJjZmZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTEyYi5jYW5vbmljYWwKQEAgLTAsMCArMSwzIEBACislWUFNTCAxLjEKKy0tLQorISFzdHIgIlRleHQgY29udGVudFxuIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA3LTEyYi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTEyYi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjUwZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMTJiLmRhdGEKQEAgLTAsMCArMSw0IEBACisjIEV4cGxpY2l0IGRvY3VtZW50LiBSb290CisjIHNjYWxhciAobGl0ZXJhbCkgbm9kZS4KKy0tLSB8CisgVGV4dCBjb250ZW50CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMTMuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTEzLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWY3MWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA3LTEzLmNhbm9uaWNhbApAQCAtMCwwICsxLDkgQEAKKyVZQU1MIDEuMQorLS0tCishIXN0ciAiRmlyc3QgZG9jdW1lbnQiCistLS0KKyE8IWZvbz4gIk5vIGRpcmVjdGl2ZXMiCistLS0KKyE8IWZvb2Jhcj4gIldpdGggZGlyZWN0aXZlcyIKKy0tLQorITwhYmF6PiAiUmVzZXQgc2V0dGluZ3MiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDctMTMuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wNy0xMy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhN2VjNjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDctMTMuZGF0YQpAQCAtMCwwICsxLDkgQEAKKyEgIkZpcnN0IGRvY3VtZW50IgorLS0tCishZm9vICJObyBkaXJlY3RpdmVzIgorJVRBRyAhICFmb28KKy0tLQorIWJhciAiV2l0aCBkaXJlY3RpdmVzIgorJVlBTUwgMS4xCistLS0KKyFiYXogIlJlc2V0IHNldHRpbmdzIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTAxLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wMS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllNDE2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wMS5jYW5vbmljYWwKQEAgLTAsMCArMSw4IEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICZBMSAhIXN0ciAiZm9vIgorICA6ICEhc3RyICJiYXIiLAorICA/ICZBMiAhIXN0ciAiYmF6IgorICA6ICpBMQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTAxLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODk4NmVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTAxLmRhdGEKQEAgLTAsMCArMSwyIEBACishIXN0ciAmYTEgImZvbyIgOiAhIXN0ciBiYXIKKyZhMiBiYXogOiAqYTEKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0wMi5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDIuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmY3NmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDIuY2Fub25pY2FsCkBAIC0wLDAgKzEsOCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiRmlyc3Qgb2NjdXJyZW5jZSIKKyAgOiAmQSAhIXN0ciAiVmFsdWUiLAorICA/ICEhc3RyICJTZWNvbmQgb2NjdXJyZW5jZSIKKyAgOiAqQQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTAyLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDBkMTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTAyLmRhdGEKQEAgLTAsMCArMSwyIEBACitGaXJzdCBvY2N1cnJlbmNlOiAmYW5jaG9yIFZhbHVlCitTZWNvbmQgb2NjdXJyZW5jZTogKmFuY2hvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTAzLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wMy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3ZWE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wMy5jYW5vbmljYWwKQEAgLTAsMCArMSw2IEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICE8dGFnOnlhbWwub3JnLDIwMDI6c3RyPiAiZm9vIgorICA6ICE8IWJhcj4gImJheiIKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0wMy5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTAzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1MWY1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wMy5kYXRhCkBAIC0wLDAgKzEsMiBAQAorITx0YWc6eWFtbC5vcmcsMjAwMjpzdHI+IGZvbyA6CisgICE8IWJhcj4gYmF6CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDgtMDQuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wNC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZDFiMDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDQuZGF0YQpAQCAtMCwwICsxLDIgQEAKKy0gITwhPiBmb28KKy0gITwkOj8+IGJhcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTA0LmVycm9yIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTA0LmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjYzNzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDQuZXJyb3IKQEAgLTAsMCArMSw2IEBACitFUlJPUjoKKy0gVmVyYmF0aW0gdGFncyBhcmVuJ3QgcmVzb2x2ZWQsCisgIHNvICEgaXMgaW52YWxpZC4KKy0gVGhlICQ6PyB0YWcgaXMgbmVpdGhlciBhIGdsb2JhbAorICBVUkkgdGFnIG5vciBhIGxvY2FsIHRhZyBzdGFydGluZworICB3aXRoIOKAnCHigJ0uCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDgtMDUuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTA1LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWM3MTBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTA1LmNhbm9uaWNhbApAQCAtMCwwICsxLDcgQEAKKyVZQU1MIDEuMQorLS0tCishIXNlcSBbCisgICE8IWxvY2FsPiAiZm9vIiwKKyAgITx0YWc6eWFtbC5vcmcsMjAwMjpzdHI+ICJiYXIiLAorICAhPHRhZzpiZW4ta2lraS5vcmcsMjAwMDp0eXBlPiAiYmF6IiwKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0wNS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTA1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1NzZlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wNS5kYXRhCkBAIC0wLDAgKzEsNSBAQAorJVRBRyAhbyEgdGFnOmJlbi1raWtpLm9yZywyMDAwOgorLS0tCistICFsb2NhbCBmb28KKy0gISFzdHIgYmFyCistICFvIXR5cGUgYmF6CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDgtMDYuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wNi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODAwMTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDYuZGF0YQpAQCAtMCwwICsxLDUgQEAKKyVUQUcgIW8hIHRhZzpiZW4ta2lraS5vcmcsMjAwMDoKKy0tLQorLSAhJGEhYiBmb28KKy0gIW8hIGJhcgorLSAhaCF0eXBlIGJhegpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTA2LmVycm9yIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTA2LmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzZmNDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDYuZXJyb3IKQEAgLTAsMCArMSw0IEBACitFUlJPUjoKKy0gVGhlICEkYSEgbG9va3MgbGlrZSBhIGhhbmRsZS4KKy0gVGhlICFvISBoYW5kbGUgaGFzIG5vIHN1ZmZpeC4KKy0gVGhlICFoISBoYW5kbGUgd2Fzbid0IGRlY2xhcmVkLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTA3LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wNy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNDNkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wNy5jYW5vbmljYWwKQEAgLTAsMCArMSw4IEBACislWUFNTCAxLjEKKy0tLQorISFzZXEgWworICAhPHRhZzp5YW1sLm9yZywyMDAyOnN0cj4gIjEyIiwKKyAgITx0YWc6eWFtbC5vcmcsMjAwMjppbnQ+ICIxMiIsCisjICAhPHRhZzp5YW1sLm9yZywyMDAyOnN0cj4gIjEyIiwKKyAgITx0YWc6eWFtbC5vcmcsMjAwMjppbnQ+ICIxMiIsCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDgtMDcuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wNy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YWE1NjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDcuZGF0YQpAQCAtMCwwICsxLDQgQEAKKyMgQXNzdW1pbmcgY29udmVudGlvbmFsIHJlc29sdXRpb246CistICIxMiIKKy0gMTIKKy0gISAxMgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTA4LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wOC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmOGIxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wOC5jYW5vbmljYWwKQEAgLTAsMCArMSwxNSBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiZm9vIgorICA6ICEhc3RyICJiYXIgYmF6IgorfQorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmb28gYmFyIgorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmb28gYmFyIgorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmb29cbiIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0wOC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTA4LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3YTkzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wOC5kYXRhCkBAIC0wLDAgKzEsMTMgQEAKKy0tLQorZm9vOgorICJiYXIKKyBiYXoiCistLS0KKyJmb28KKyBiYXIiCistLS0KK2ZvbworIGJhcgorLS0tIHwKKyBmb28KKy4uLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTA5LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wOS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwNWRhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0wOS5jYW5vbmljYWwKQEAgLTAsMCArMSwyMSBAQAorJVlBTUwgMS4xCistLS0gISFtYXAgeworICA/ICEhc3RyICJzY2FsYXJzIiA6ICEhbWFwIHsKKyAgICAgID8gISFzdHIgInBsYWluIgorICAgICAgOiAhIXN0ciAic29tZSB0ZXh0IiwKKyAgICAgID8gISFzdHIgInF1b3RlZCIKKyAgICAgIDogISFtYXAgeworICAgICAgICA/ICEhc3RyICJzaW5nbGUiCisgICAgICAgIDogISFzdHIgInNvbWUgdGV4dCIsCisgICAgICAgID8gISFzdHIgImRvdWJsZSIKKyAgICAgICAgOiAhIXN0ciAic29tZSB0ZXh0IgorICB9IH0sCisgID8gISFzdHIgImNvbGxlY3Rpb25zIiA6ICEhbWFwIHsKKyAgICA/ICEhc3RyICJzZXF1ZW5jZSIgOiAhIXNlcSBbCisgICAgICAhIXN0ciAiZW50cnkiLAorICAgICAgISFtYXAgeworICAgICAgICA/ICEhc3RyICJrZXkiIDogISFzdHIgInZhbHVlIgorICAgIH0gXSwKKyAgICA/ICEhc3RyICJtYXBwaW5nIiA6ICEhbWFwIHsKKyAgICAgID8gISFzdHIgImtleSIgOiAhIXN0ciAidmFsdWUiCit9IH0gfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTA5LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMDkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWRhMDQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTA5LmRhdGEKQEAgLTAsMCArMSwxMSBAQAorLS0tCitzY2FsYXJzOgorICBwbGFpbjogISFzdHIgc29tZSB0ZXh0CisgIHF1b3RlZDoKKyAgICBzaW5nbGU6ICdzb21lIHRleHQnCisgICAgZG91YmxlOiAic29tZSB0ZXh0IgorY29sbGVjdGlvbnM6CisgIHNlcXVlbmNlOiAhIXNlcSBbICEhc3RyIGVudHJ5LAorICAgICMgTWFwcGluZyBlbnRyeToKKyAgICAgIGtleTogdmFsdWUgXQorICBtYXBwaW5nOiB7IGtleTogdmFsdWUgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTEwLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4MWM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMC5jYW5vbmljYWwKQEAgLTAsMCArMSwyMyBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiYmxvY2sgc3R5bGVzIiA6ICEhbWFwIHsKKyAgICA/ICEhc3RyICJzY2FsYXJzIiA6ICEhbWFwIHsKKyAgICAgID8gISFzdHIgImxpdGVyYWwiCisgICAgICA6ICEhc3RyICIjIS91c3IvYmluL3BlcmxcblwKKyAgICAgICAgICBwcmludCBcIkhlbGxvLAorICAgICAgICAgIHdvcmxkIVxcblwiO1xuIiwKKyAgICAgID8gISFzdHIgImZvbGRlZCIKKyAgICAgIDogISFzdHIgIlRoaXMgc2VudGVuY2UKKyAgICAgICAgICBpcyBmYWxzZS5cbiIKKyAgICB9LAorICAgID8gISFzdHIgImNvbGxlY3Rpb25zIiA6ICEhbWFwIHsKKyAgICAgID8gISFzdHIgInNlcXVlbmNlIiA6ICEhc2VxIFsKKyAgICAgICAgISFzdHIgImVudHJ5IiwKKyAgICAgICAgISFtYXAgeworICAgICAgICAgID8gISFzdHIgImtleSIgOiAhIXN0ciAidmFsdWUiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICA/ICEhc3RyICJtYXBwaW5nIiA6ICEhbWFwIHsKKyAgICAgICAgPyAhIXN0ciAia2V5IiA6ICEhc3RyICJ2YWx1ZSIKK30gfSB9IH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTEwLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhY2M1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMC5kYXRhCkBAIC0wLDAgKzEsMTUgQEAKK2Jsb2NrIHN0eWxlczoKKyAgc2NhbGFyczoKKyAgICBsaXRlcmFsOiAhIXN0ciB8CisgICAgICAjIS91c3IvYmluL3BlcmwKKyAgICAgIHByaW50ICJIZWxsbywgd29ybGQhXG4iOworICAgIGZvbGRlZDogPgorICAgICAgVGhpcyBzZW50ZW5jZQorICAgICAgaXMgZmFsc2UuCisgIGNvbGxlY3Rpb25zOiAhIW1hcAorICAgIHNlcXVlbmNlOiAhIXNlcSAjIEVudHJ5OgorICAgICAgLSBlbnRyeSAjIFBsYWluCisgICAgICAjIE1hcHBpbmcgZW50cnk6CisgICAgICAtIGtleTogdmFsdWUKKyAgICBtYXBwaW5nOiAKKyAgICAgIGtleTogdmFsdWUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMS5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMTEuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmY3NmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMTEuY2Fub25pY2FsCkBAIC0wLDAgKzEsOCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiRmlyc3Qgb2NjdXJyZW5jZSIKKyAgOiAmQSAhIXN0ciAiVmFsdWUiLAorICA/ICEhc3RyICJTZWNvbmQgb2NjdXJyZW5jZSIKKyAgOiAqQQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTExLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMTEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDBkMTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTExLmRhdGEKQEAgLTAsMCArMSwyIEBACitGaXJzdCBvY2N1cnJlbmNlOiAmYW5jaG9yIFZhbHVlCitTZWNvbmQgb2NjdXJyZW5jZTogKmFuY2hvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTEyLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4OTlmNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMi5jYW5vbmljYWwKQEAgLTAsMCArMSwxMCBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgISFzdHIgIldpdGhvdXQgcHJvcGVydGllcyIsCisgICZBICEhc3RyICJBbmNob3JlZCIsCisgICEhc3RyICJUYWdnZWQiLAorICAqQSwKKyAgISFzdHIgIiIsCisgICEhc3RyICIiLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTEyLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMTIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDRjNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTEyLmRhdGEKQEAgLTAsMCArMSw4IEBACitbCisgIFdpdGhvdXQgcHJvcGVydGllcywKKyAgJmFuY2hvciAiQW5jaG9yZWQiLAorICAhIXN0ciAnVGFnZ2VkJywKKyAgKmFuY2hvciwgIyBBbGlhcyBub2RlCisgICEhc3RyICwgICMgRW1wdHkgcGxhaW4gc2NhbGFyCisgICcnLCAgICMgRW1wdHkgcGxhaW4gc2NhbGFyCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDgtMTMuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTEzLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MThiYjdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTEzLmNhbm9uaWNhbApAQCAtMCwwICsxLDEwIEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICEhc3RyICJmb28iCisjICA6ICEhc3RyICIiLAorIyAgPyAhIXN0ciAiIgorICA6ICEhbnVsbCAiIiwKKyAgPyAhIW51bGwgIiIKKyAgOiAhIXN0ciAiYmFyIiwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMy5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTEzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlNjYzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0xMy5kYXRhCkBAIC0wLDAgKzEsNCBAQAoreworICA/IGZvbyA6LAorICA/IDogYmFyLAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA4LTEzLnNraXAtZXh0IGIvdGVzdHMvZGF0YS9zcGVjLTA4LTEzLnNraXAtZXh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMTMuc2tpcC1leHQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0xNC5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMTQuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGI0MzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMTQuY2Fub25pY2FsCkBAIC0wLDAgKzEsMTAgQEAKKyVZQU1MIDEuMQorLS0tCishIXNlcSBbCisgICEhc3RyICJmbG93IGluIGJsb2NrIiwKKyAgISFzdHIgIkJsb2NrIHNjYWxhclxuIiwKKyAgISFtYXAgeworICAgID8gISFzdHIgImZvbyIKKyAgICA6ICEhc3RyICJiYXIiCisgIH0KK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOC0xNC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTE0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiYjFmNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0xNC5kYXRhCkBAIC0wLDAgKzEsNSBAQAorLSAiZmxvdyBpbiBibG9jayIKKy0gPgorIEJsb2NrIHNjYWxhcgorLSAhIW1hcCAjIEJsb2NrIGNvbGxlY3Rpb24KKyAgZm9vIDogYmFyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDgtMTUuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTE1LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmYwMjhlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA4LTE1LmNhbm9uaWNhbApAQCAtMCwwICsxLDExIEBACislWUFNTCAxLjEKKy0tLQorISFzZXEgWworICAhIW51bGwgIiIsCisgICEhbWFwIHsKKyAgICA/ICEhc3RyICJmb28iCisgICAgOiAhIW51bGwgIiIsCisgICAgPyAhIW51bGwgIiIKKyAgICA6ICEhc3RyICJiYXIiLAorICB9CitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDgtMTUuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOC0xNS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjODZiY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDgtMTUuZGF0YQpAQCAtMCwwICsxLDUgQEAKKy0gIyBFbXB0eSBwbGFpbiBzY2FsYXIKKy0gPyBmb28KKyAgOgorICA/CisgIDogYmFyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMDEuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTAxLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzFhNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTAxLmNhbm9uaWNhbApAQCAtMCwwICsxLDExIEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICEhc3RyICJzaW1wbGUga2V5IgorICA6ICEhbWFwIHsKKyAgICA/ICEhc3RyICJhbHNvIHNpbXBsZSIKKyAgICA6ICEhc3RyICJ2YWx1ZSIsCisgICAgPyAhIXN0ciAibm90IGEgc2ltcGxlIGtleSIKKyAgICA6ICEhc3RyICJhbnkgdmFsdWUiCisgIH0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0wMS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTAxLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4M2VhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wMS5kYXRhCkBAIC0wLDAgKzEsNiBAQAorInNpbXBsZSBrZXkiIDogeworICAiYWxzbyBzaW1wbGUiIDogdmFsdWUsCisgID8gIm5vdCBhCisgIHNpbXBsZSBrZXkiIDogImFueQorICB2YWx1ZSIKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0wMi5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDIuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOGY0MWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDIuY2Fub25pY2FsCkBAIC0wLDAgKzEsNyBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJhcyBzcGFjZSBcCisgIHRyaW1tZWRcblwKKyAgc3BlY2lmaWNcTFxuXAorICBlc2NhcGVkXHRcblwKKyAgbm9uZSIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0wMi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTAyLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0ODgzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wMi5kYXRhCkBAIC0wLDAgKzEsNiBAQAorICJhcyBzcGFjZQkKKyB0cmltbWVkIAorCisgc3BlY2lmaWPigKgKKyBlc2NhcGVkCVzigKkgCisgbm9uZSIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0wMy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDMuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OGM2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDMuY2Fub25pY2FsCkBAIC0wLDAgKzEsNyBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgISFzdHIgIiBsYXN0IiwKKyAgISFzdHIgIiBsYXN0IiwKKyAgISFzdHIgIiBcdGZpcnN0IGxhc3QiLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTAzLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGI5MTRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTAzLmRhdGEKQEAgLTAsMCArMSw2IEBACistICIKKyAgbGFzdCIKKy0gIiAJCisgIGxhc3QiCistICIgCWZpcnN0CisgIGxhc3QiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMDQuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA0LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ2NjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA0LmNhbm9uaWNhbApAQCAtMCwwICsxLDYgQEAKKyVZQU1MIDEuMQorLS0tCishIXN0ciAiZmlyc3QgXAorICBpbm5lciAxICBcCisgIGlubmVyIDIgXAorICBsYXN0IgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTA0LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTNhOTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA0LmRhdGEKQEAgLTAsMCArMSw0IEBACisgImZpcnN0CisgCWlubmVyIDEJCisgXCBpbm5lciAyIFwKKyBsYXN0IgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTA1LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wNS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkMTA1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wNS5jYW5vbmljYWwKQEAgLTAsMCArMSw3IEBACislWUFNTCAxLjEKKy0tLQorISFzZXEgWworICAhIXN0ciAiZmlyc3QgIiwKKyAgISFzdHIgImZpcnN0XG5sYXN0IiwKKyAgISFzdHIgImZpcnN0IGlubmVyICBcdGxhc3QiLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTA1LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjRjMzBlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA1LmRhdGEKQEAgLTAsMCArMSw4IEBACistICJmaXJzdAorICAJIgorLSAiZmlyc3QKKworICAJbGFzdCIKKy0gImZpcnN0CisgaW5uZXIKKyBcIAlsYXN0IgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTA2LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wNi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyODc3MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wNi5jYW5vbmljYWwKQEAgLTAsMCArMSwzIEBACislWUFNTCAxLjEKKy0tLQorISFzdHIgImhlcmUncyB0byBcInF1b3Rlc1wiIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTA2LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDYuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDM4MDc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA2LmRhdGEKQEAgLTAsMCArMSBAQAorICdoZXJlJydzIHRvICJxdW90ZXMiJwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTA3LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wNy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcxYTU0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wNy5jYW5vbmljYWwKQEAgLTAsMCArMSwxMSBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAic2ltcGxlIGtleSIKKyAgOiAhIW1hcCB7CisgICAgPyAhIXN0ciAiYWxzbyBzaW1wbGUiCisgICAgOiAhIXN0ciAidmFsdWUiLAorICAgID8gISFzdHIgIm5vdCBhIHNpbXBsZSBrZXkiCisgICAgOiAhIXN0ciAiYW55IHZhbHVlIgorICB9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMDcuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wNy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NWI1NGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDcuZGF0YQpAQCAtMCwwICsxLDYgQEAKKydzaW1wbGUga2V5JyA6IHsKKyAgJ2Fsc28gc2ltcGxlJyA6IHZhbHVlLAorICA/ICdub3QgYQorICBzaW1wbGUga2V5JyA6ICdhbnkKKyAgdmFsdWUnCit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMDguY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA4LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmFiZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA4LmNhbm9uaWNhbApAQCAtMCwwICsxLDYgQEAKKyVZQU1MIDEuMQorLS0tCishIXN0ciAiYXMgc3BhY2UgXAorICB0cmltbWVkXG5cCisgIHNwZWNpZmljXExcblwKKyAgbm9uZSIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0wOC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA4LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ZDQ1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0wOC5kYXRhCkBAIC0wLDAgKzEgQEAKKyAnYXMgc3BhY2UJwoUgdHJpbW1lZCDChcKFIHNwZWNpZmlj4oCowoUgbm9uZScKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0wOS5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDkuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OGM2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDkuY2Fub25pY2FsCkBAIC0wLDAgKzEsNyBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgISFzdHIgIiBsYXN0IiwKKyAgISFzdHIgIiBsYXN0IiwKKyAgISFzdHIgIiBcdGZpcnN0IGxhc3QiLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTA5LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMDkuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjE3MWRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTA5LmRhdGEKQEAgLTAsMCArMSw2IEBACistICcKKyAgbGFzdCcKKy0gJyAJCisgIGxhc3QnCistICcgCWZpcnN0CisgIGxhc3QnCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMTAuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTEwLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDI4ZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTEwLmNhbm9uaWNhbApAQCAtMCwwICsxLDUgQEAKKyVZQU1MIDEuMQorLS0tCishIXN0ciAiZmlyc3QgXAorICBpbm5lciBcCisgIGxhc3QiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMTAuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xMC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDE0NDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTAuZGF0YQpAQCAtMCwwICsxLDMgQEAKKyAnZmlyc3QKKyAJaW5uZXIJCisgbGFzdCcKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0xMS5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTEuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYjIyMmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTEuY2Fub25pY2FsCkBAIC0wLDAgKzEsNiBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgISFzdHIgImZpcnN0ICIsCisgICEhc3RyICJmaXJzdFxubGFzdCIsCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMTEuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xMS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZmE4NzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTEuZGF0YQpAQCAtMCwwICsxLDUgQEAKKy0gJ2ZpcnN0CisgIAknCistICdmaXJzdAorCisgIAlsYXN0JwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTEyLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xMi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlNmRjZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xMi5jYW5vbmljYWwKQEAgLTAsMCArMSwxMiBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgISFzdHIgIjo6c3RkOjp2ZWN0b3IiLAorICAhIXN0ciAiVXAsIHVwLCBhbmQgYXdheSEiLAorICAhIWludCAiLTEyMyIsCisgICEhc2VxIFsKKyAgICAhIXN0ciAiOjpzdGQ6OnZlY3RvciIsCisgICAgISFzdHIgIlVwLCB1cCwgYW5kIGF3YXkhIiwKKyAgICAhIWludCAiLTEyMyIsCisgIF0KK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0xMi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTEyLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhM2FjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xMi5kYXRhCkBAIC0wLDAgKzEsOCBAQAorIyBPdXRzaWRlIGZsb3cgY29sbGVjdGlvbjoKKy0gOjpzdGQ6OnZlY3RvcgorLSBVcCwgdXAsIGFuZCBhd2F5IQorLSAtMTIzCisjIEluc2lkZSBmbG93IGNvbGxlY3Rpb246CistIFsgJzo6c3RkOjp2ZWN0b3InLAorICAiVXAsIHVwLCBhbmQgYXdheSEiLAorICAtMTIzIF0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0xMy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTMuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MWE1NDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTMuY2Fub25pY2FsCkBAIC0wLDAgKzEsMTEgQEAKKyVZQU1MIDEuMQorLS0tCishIW1hcCB7CisgID8gISFzdHIgInNpbXBsZSBrZXkiCisgIDogISFtYXAgeworICAgID8gISFzdHIgImFsc28gc2ltcGxlIgorICAgIDogISFzdHIgInZhbHVlIiwKKyAgICA/ICEhc3RyICJub3QgYSBzaW1wbGUga2V5IgorICAgIDogISFzdHIgImFueSB2YWx1ZSIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTEzLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTU2Mzg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTEzLmRhdGEKQEAgLTAsMCArMSw2IEBACitzaW1wbGUga2V5IDogeworICBhbHNvIHNpbXBsZSA6IHZhbHVlLAorICA/IG5vdCBhCisgIHNpbXBsZSBrZXkgOiBhbnkKKyAgdmFsdWUKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTE0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmMjMxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNC5kYXRhCkBAIC0wLDAgKzEsMTQgQEAKKy0tLQorLS0tIHx8fCA6IGZvbworLi4uID4+PjogYmFyCistLS0KK1sKKy0tLQorLAorLi4uICwKK3sKKy0tLSA6CisuLi4gIyBOZXN0ZWQKK30KK10KKy4uLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTE0LmVycm9yIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTE0LmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmM2RiN2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTQuZXJyb3IKQEAgLTAsMCArMSw2IEBACitFUlJPUjoKKyBUaGUgLS0tIGFuZCAuLi4gZG9jdW1lbnQKKyBzdGFydCBhbmQgZW5kIG1hcmtlcnMgbXVzdAorIG5vdCBiZSBzcGVjaWZpZWQgYXMgdGhlCisgZmlyc3QgY29udGVudCBsaW5lIG9mIGEKKyBub24taW5kZW50ZWQgcGxhaW4gc2NhbGFyLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTE1LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwMjA0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNS5jYW5vbmljYWwKQEAgLTAsMCArMSwxOCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiLS0tIgorICA6ICEhc3RyICJmb28iLAorICA/ICEhc3RyICIuLi4iCisgIDogISFzdHIgImJhciIKK30KKyVZQU1MIDEuMQorLS0tCishIXNlcSBbCisgICEhc3RyICItLS0iLAorICAhIXN0ciAiLi4uIiwKKyAgISFtYXAgeworICAgID8gISFzdHIgIi0tLSIKKyAgICA6ICEhc3RyICIuLi4iCisgIH0KK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTE1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4NjNiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNS5kYXRhCkBAIC0wLDAgKzEsMTMgQEAKKy0tLQorIi0tLSIgOiBmb28KKy4uLjogYmFyCistLS0KK1sKKy0tLSwKKy4uLiwKK3sKKz8gLS0tCis6IC4uLgorfQorXQorLi4uCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMTYuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTE2LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmFiZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTE2LmNhbm9uaWNhbApAQCAtMCwwICsxLDYgQEAKKyVZQU1MIDEuMQorLS0tCishIXN0ciAiYXMgc3BhY2UgXAorICB0cmltbWVkXG5cCisgIHNwZWNpZmljXExcblwKKyAgbm9uZSIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTE2LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczYmViOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNi5kYXRhCkBAIC0wLDAgKzEsMyBAQAorIyBUYWJzIGFyZSBjb25mdXNpbmc6CisjIGFzIHNwYWNlL3RyaW1tZWQvc3BlY2lmaWMvbm9uZQorIGFzIHNwYWNlIMKFIHRyaW1tZWQgwoXChSBzcGVjaWZpY+KAqMKFIG5vbmUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTcuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2I3MGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTcuY2Fub25pY2FsCkBAIC0wLDAgKzEsNCBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmaXJzdCBsaW5lXG5cCisgICAgICBtb3JlIGxpbmUiCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMTcuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xNy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YmM0NmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTcuZGF0YQpAQCAtMCwwICsxLDMgQEAKKyBmaXJzdCBsaW5lIAorICAgCisgIG1vcmUgbGluZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTE4LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xOC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxNDI4ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xOC5jYW5vbmljYWwKQEAgLTAsMCArMSw4IEBACislWUFNTCAxLjEKKy0tLQorISFzZXEgWworICAhIXN0ciAibGl0ZXJhbFxuIiwKKyAgISFzdHIgIiBmb2xkZWRcbiIsCisgICEhc3RyICJrZWVwXG5cbiIsCisgICEhc3RyICIgc3RyaXAiLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTE4LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMTguZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM1ZDdjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTE4LmRhdGEKQEAgLTAsMCArMSw5IEBACistIHwgIyBKdXN0IHRoZSBzdHlsZQorIGxpdGVyYWwKKy0gPjEgIyBJbmRlbnRhdGlvbiBpbmRpY2F0b3IKKyAgZm9sZGVkCistIHwrICMgQ2hvbXBpbmcgaW5kaWNhdG9yCisga2VlcAorCistID4tMSAjIEJvdGggaW5kaWNhdG9ycworICBzdHJpcApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTE5LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xOS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4MjhkNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xOS5jYW5vbmljYWwKQEAgLTAsMCArMSw2IEBACislWUFNTCAxLjEKKy0tLQorISFzZXEgWworICAhIXN0ciAibGl0ZXJhbFxuIiwKKyAgISFzdHIgImZvbGRlZFxuIiwKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0xOS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTE5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlNTg5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0xOS5kYXRhCkBAIC0wLDAgKzEsNCBAQAorLSB8CisgbGl0ZXJhbAorLSA+CisgZm9sZGVkCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMjAuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTIwLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDNiZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTIwLmNhbm9uaWNhbApAQCAtMCwwICsxLDggQEAKKyVZQU1MIDEuMQorLS0tCishIXNlcSBbCisgICEhc3RyICJkZXRlY3RlZFxuIiwKKyAgISFzdHIgIlxuXG4jIGRldGVjdGVkXG4iLAorICAhIXN0ciAiIGV4cGxpY2l0XG4iLAorICAhIXN0ciAiXHRcbmRldGVjdGVkXG4iLAorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTIwLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjAuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWJlZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTIwLmRhdGEKQEAgLTAsMCArMSwxMSBAQAorLSB8CisgZGV0ZWN0ZWQKKy0gPgorIAorICAKKyAgIyBkZXRlY3RlZAorLSB8MQorICBleHBsaWNpdAorLSA+CisgCQorIGRldGVjdGVkCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMjAuc2tpcC1leHQgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjAuc2tpcC1leHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yMC5za2lwLWV4dApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTIxLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmRkMTRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTIxLmRhdGEKQEAgLTAsMCArMSw4IEBACistIHwKKyAgCisgdGV4dAorLSA+CisgIHRleHQKKyB0ZXh0CistIHwxCisgdGV4dApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTIxLmVycm9yIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTIxLmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzljYTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjEuZXJyb3IKQEAgLTAsMCArMSw3IEBACitFUlJPUjoKKy0gQSBsZWFkaW5nIGFsbC1zcGFjZSBsaW5lIG11c3QKKyAgbm90IGhhdmUgdG9vIG1hbnkgc3BhY2VzLgorLSBBIGZvbGxvd2luZyB0ZXh0IGxpbmUgbXVzdAorICBub3QgYmUgbGVzcyBpbmRlbnRlZC4KKy0gVGhlIHRleHQgaXMgbGVzcyBpbmRlbnRlZAorICB0aGFuIHRoZSBpbmRpY2F0ZWQgbGV2ZWwuCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMjIuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTIyLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWJiY2QyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTIyLmNhbm9uaWNhbApAQCAtMCwwICsxLDEwIEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICEhc3RyICJzdHJpcCIKKyAgOiAhIXN0ciAidGV4dCIsCisgID8gISFzdHIgImNsaXAiCisgIDogISFzdHIgInRleHRcbiIsCisgID8gISFzdHIgImtlZXAiCisgIDogISFzdHIgInRleHRcTCIsCit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMjIuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yMi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZDUxZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjIuZGF0YQpAQCAtMCwwICsxLDQgQEAKK3N0cmlwOiB8LQorICB0ZXh04oCpY2xpcDogfAorICB0ZXh0woVrZWVwOiB8KworICB0ZXh04oCoClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTIzLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yMy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0NDRjYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yMy5jYW5vbmljYWwKQEAgLTAsMCArMSwxMCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAic3RyaXAiCisgIDogISFzdHIgIiMgdGV4dCIsCisgID8gISFzdHIgImNsaXAiCisgIDogISFzdHIgIiMgdGV4dFxuIiwKKyAgPyAhIXN0ciAia2VlcCIKKyAgOiAhIXN0ciAiIyB0ZXh0XExcbiIsCit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMjMuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yMy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzJkMmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjMuZGF0YQpAQCAtMCwwICsxLDExIEBACisgIyBTdHJpcAorICAjIENvbW1lbnRzOgorc3RyaXA6IHwtCisgICMgdGV4dOKAqSAg4oCoICMgQ2xpcAorICAjIGNvbW1lbnRzOgorwoVjbGlwOiB8CisgICMgdGV4dMKFIOKAqSAjIEtlZXAKKyAgIyBjb21tZW50czoKK8KFa2VlcDogfCsKKyAgIyB0ZXh04oCowoUgIyBUcmFpbAorICAjIGNvbW1lbnRzLgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTI0LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhOTliMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNC5jYW5vbmljYWwKQEAgLTAsMCArMSwxMCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAic3RyaXAiCisgIDogISFzdHIgIiIsCisgID8gISFzdHIgImNsaXAiCisgIDogISFzdHIgIiIsCisgID8gISFzdHIgImtlZXAiCisgIDogISFzdHIgIlxuIiwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNC5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTI0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwYjY0YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNC5kYXRhCkBAIC0wLDAgKzEsNiBAQAorc3RyaXA6ID4tCisKK2NsaXA6ID4KKwora2VlcDogfCsKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTI1LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyMzI3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNS5jYW5vbmljYWwKQEAgLTAsMCArMSw0IEBACislWUFNTCAxLjEKKy0tLQorISFzdHIgImxpdGVyYWxcblwKKyAgICAgIFx0dGV4dFxuIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTI1LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjMwM2ExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTI1LmRhdGEKQEAgLTAsMCArMSwzIEBACit8ICMgU2ltcGxlIGJsb2NrIHNjYWxhcgorIGxpdGVyYWwKKyAJdGV4dApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTI2LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyOWExMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNi5jYW5vbmljYWwKQEAgLTAsMCArMSwzIEBACislWUFNTCAxLjEKKy0tLQorISFzdHIgIlxuXG5saXRlcmFsXG5cbnRleHRcbiIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTI2LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4NTU1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNi5kYXRhCkBAIC0wLDAgKzEsOCBAQAorfAorIAorICAKKyAgbGl0ZXJhbAorIAorICB0ZXh0CisKKyAjIENvbW1lbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjcuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMjlhMTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjcuY2Fub25pY2FsCkBAIC0wLDAgKzEsMyBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJcblxubGl0ZXJhbFxuXG50ZXh0XG4iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMjcuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yNy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODU1NWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjcuZGF0YQpAQCAtMCwwICsxLDggQEAKK3wKKyAKKyAgCisgIGxpdGVyYWwKKyAKKyAgdGV4dAorCisgIyBDb21tZW50CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMjguY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTI4LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDI5YTExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTI4LmNhbm9uaWNhbApAQCAtMCwwICsxLDMgQEAKKyVZQU1MIDEuMQorLS0tCishIXN0ciAiXG5cbmxpdGVyYWxcblxudGV4dFxuIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTI4LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjguZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjg1NTVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTI4LmRhdGEKQEAgLTAsMCArMSw4IEBACit8CisgCisgIAorICBsaXRlcmFsCisgCisgIHRleHQKKworICMgQ29tbWVudApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTI5LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yOS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4MDc4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yOS5jYW5vbmljYWwKQEAgLTAsMCArMSw0IEBACislWUFNTCAxLjEKKy0tLQorISFzdHIgImZvbGRlZCB0ZXh0XG5cCisgICAgICBcdGxpbmVzXG4iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMjkuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0yOS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTYxMWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMjkuZGF0YQpAQCAtMCwwICsxLDQgQEAKKz4gIyBTaW1wbGUgZm9sZGVkIHNjYWxhcgorIGZvbGRlZAorIHRleHQKKyAJbGluZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0zMC5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMzAuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzdkYjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMzAuY2Fub25pY2FsCkBAIC0wLDAgKzEsNyBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmb2xkZWQgbGluZVxuXAorICAgICAgbmV4dCBsaW5lXG5cblwKKyAgICAgIFwgICogYnVsbGV0XG5cCisgICAgICBcICAqIGxpc3RcblxuXAorICAgICAgbGFzdCBsaW5lXG4iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMzAuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0zMC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDhjMzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMzAuZGF0YQpAQCAtMCwwICsxLDE0IEBACis+CisgZm9sZGVkCisgbGluZQorCisgbmV4dAorIGxpbmUKKworICAgKiBidWxsZXQKKyAgICogbGlzdAorCisgbGFzdAorIGxpbmUKKworIyBDb21tZW50CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMzEuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTMxLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzM3ZGIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTMxLmNhbm9uaWNhbApAQCAtMCwwICsxLDcgQEAKKyVZQU1MIDEuMQorLS0tCishIXN0ciAiZm9sZGVkIGxpbmVcblwKKyAgICAgIG5leHQgbGluZVxuXG5cCisgICAgICBcICAqIGJ1bGxldFxuXAorICAgICAgXCAgKiBsaXN0XG5cblwKKyAgICAgIGxhc3QgbGluZVxuIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTMxLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMDktMzEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQ4YzM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTMxLmRhdGEKQEAgLTAsMCArMSwxNCBAQAorPgorIGZvbGRlZAorIGxpbmUKKworIG5leHQKKyBsaW5lCisKKyAgICogYnVsbGV0CisgICAqIGxpc3QKKworIGxhc3QKKyBsaW5lCisKKyMgQ29tbWVudApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTA5LTMyLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0zMi5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzN2RiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0zMi5jYW5vbmljYWwKQEAgLTAsMCArMSw3IEBACislWUFNTCAxLjEKKy0tLQorISFzdHIgImZvbGRlZCBsaW5lXG5cCisgICAgICBuZXh0IGxpbmVcblxuXAorICAgICAgXCAgKiBidWxsZXRcblwKKyAgICAgIFwgICogbGlzdFxuXG5cCisgICAgICBsYXN0IGxpbmVcbiIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0zMi5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTA5LTMyLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkOGMzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0zMi5kYXRhCkBAIC0wLDAgKzEsMTQgQEAKKz4KKyBmb2xkZWQKKyBsaW5lCisKKyBuZXh0CisgbGluZQorCisgICAqIGJ1bGxldAorICAgKiBsaXN0CisKKyBsYXN0CisgbGluZQorCisjIENvbW1lbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0wOS0zMy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMDktMzMuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzdkYjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMzMuY2Fub25pY2FsCkBAIC0wLDAgKzEsNyBAQAorJVlBTUwgMS4xCistLS0KKyEhc3RyICJmb2xkZWQgbGluZVxuXAorICAgICAgbmV4dCBsaW5lXG5cblwKKyAgICAgIFwgICogYnVsbGV0XG5cCisgICAgICBcICAqIGxpc3RcblxuXAorICAgICAgbGFzdCBsaW5lXG4iCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMDktMzMuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0wOS0zMy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDhjMzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMDktMzMuZGF0YQpAQCAtMCwwICsxLDE0IEBACis+CisgZm9sZGVkCisgbGluZQorCisgbmV4dAorIGxpbmUKKworICAgKiBidWxsZXQKKyAgICogbGlzdAorCisgbGFzdAorIGxpbmUKKworIyBDb21tZW50CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMTAtMDEuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTAxLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhjZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTAxLmNhbm9uaWNhbApAQCAtMCwwICsxLDEyIEBACislWUFNTCAxLjEKKy0tLQorISFzZXEgWworICAhIXNlcSBbCisgICAgISFzdHIgImlubmVyIiwKKyAgICAhIXN0ciAiaW5uZXIiLAorICBdLAorICAhIXNlcSBbCisgICAgISFzdHIgImlubmVyIiwKKyAgICAhIXN0ciAibGFzdCIsCisgIF0sCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMTAtMDEuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wMS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NjhkMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDEuZGF0YQpAQCAtMCwwICsxLDIgQEAKKy0gWyBpbm5lciwgaW5uZXIsIF0KKy0gW2lubmVyLGxhc3RdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMTAtMDIuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTAyLmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmZlMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTAyLmNhbm9uaWNhbApAQCAtMCwwICsxLDE0IEBACislWUFNTCAxLjEKKy0tLQorISFzZXEgWworICAhIXN0ciAiZG91YmxlIHF1b3RlZCIsCisgICEhc3RyICJzaW5nbGUgcXVvdGVkIiwKKyAgISFzdHIgInBsYWluIHRleHQiLAorICAhIXNlcSBbCisgICAgISFzdHIgIm5lc3RlZCIsCisgIF0sCisgICEhbWFwIHsKKyAgICA/ICEhc3RyICJzaW5nbGUiCisgICAgOiAhIXN0ciAicGFpciIKKyAgfQorXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTAyLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjIzMzUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTAyLmRhdGEKQEAgLTAsMCArMSw4IEBACitbCisiZG91YmxlCisgcXVvdGVkIiwgJ3NpbmdsZQorICAgICAgICAgICBxdW90ZWQnLAorcGxhaW4KKyB0ZXh0LCBbIG5lc3RlZCBdLAorc2luZ2xlOiBwYWlyICwKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0wMy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDMuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDMzOTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDMuY2Fub25pY2FsCkBAIC0wLDAgKzEsMTIgQEAKKyVZQU1MIDEuMQorLS0tCishIW1hcCB7CisgID8gISFzdHIgImJsb2NrIgorICA6ICEhc2VxIFsKKyAgICAhIXN0ciAib25lIiwKKyAgICAhIW1hcCB7CisgICAgICA/ICEhc3RyICJ0d28iCisgICAgICA6ICEhc3RyICJ0aHJlZSIKKyAgICB9CisgIF0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0wMy5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTAzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxNWY4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wMy5kYXRhCkBAIC0wLDAgKzEsNCBAQAorYmxvY2s6ICMgQmxvY2sKKyAgICAgICAjIHNlcXVlbmNlCistIG9uZQorLSB0d28gOiB0aHJlZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTA0LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0ODZhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNC5jYW5vbmljYWwKQEAgLTAsMCArMSwxMSBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiYmxvY2siCisgIDogISFzZXEgWworICAgICEhc3RyICJvbmUiLAorICAgICEhc2VxIFsKKyAgICAgICEhc3RyICJ0d28iCisgICAgXQorICBdCit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMTAtMDQuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MDViMGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDQuZGF0YQpAQCAtMCwwICsxLDQgQEAKK2Jsb2NrOgorLSBvbmUKKy0KKyAtIHR3bwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTA1LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjYzBjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNS5jYW5vbmljYWwKQEAgLTAsMCArMSwxNCBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgISFudWxsICIiLAorICAhIXN0ciAiYmxvY2sgbm9kZVxuIiwKKyAgISFzZXEgWworICAgICEhc3RyICJvbmUiLAorICAgICEhc3RyICJ0d28iLAorICBdLAorICAhIW1hcCB7CisgICAgPyAhIXN0ciAib25lIgorICAgIDogISFzdHIgInR3byIsCisgIH0KK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTA1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5YTk5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNS5kYXRhCkBAIC0wLDAgKzEsNyBAQAorLSAjIEVtcHR5CistIHwKKyBibG9jayBub2RlCistIC0gb25lICMgaW4tbGluZQorICAtIHR3byAjIHNlcXVlbmNlCistIG9uZTogdHdvICMgaW4tbGluZQorICAgICAgICAgICAjIG1hcHBpbmcKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNi5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDYuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OTg2YzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDYuY2Fub25pY2FsCkBAIC0wLDAgKzEsMTYgQEAKKyVZQU1MIDEuMQorLS0tCishIXNlcSBbCisgICEhbWFwIHsKKyAgICA/ICEhc3RyICJpbm5lciIKKyAgICA6ICEhc3RyICJlbnRyeSIsCisgICAgPyAhIXN0ciAiYWxzbyIKKyAgICA6ICEhc3RyICJpbm5lciIKKyAgfSwKKyAgISFtYXAgeworICAgID8gISFzdHIgImlubmVyIgorICAgIDogISFzdHIgImVudHJ5IiwKKyAgICA/ICEhc3RyICJsYXN0IgorICAgIDogISFzdHIgImVudHJ5IgorICB9CitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMTAtMDYuZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNi5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MGJhMjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDYuZGF0YQpAQCAtMCwwICsxLDIgQEAKKy0geyBpbm5lciA6IGVudHJ5ICwgYWxzbzogaW5uZXIgLCB9CistIHtpbm5lcjogZW50cnksbGFzdCA6IGVudHJ5fQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTA3LmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNy5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3NDIzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNy5jYW5vbmljYWwKQEAgLTAsMCArMSwxNiBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIW51bGwgIiIKKyAgOiAhIXN0ciAidmFsdWUiLAorICA/ICEhc3RyICJleHBsaWNpdCBrZXkiCisgIDogISFzdHIgInZhbHVlIiwKKyAgPyAhIXN0ciAic2ltcGxlIGtleSIKKyAgOiAhIXN0ciAidmFsdWUiLAorICA/ICEhc2VxIFsKKyAgICAhIXN0ciAiY29sbGVjdGlvbiIsCisgICAgISFzdHIgInNpbXBsZSIsCisgICAgISFzdHIgImtleSIKKyAgXQorICA6ICEhc3RyICJ2YWx1ZSIKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNy5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTA3LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5NDNmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wNy5kYXRhCkBAIC0wLDAgKzEsNyBAQAoreworPyA6IHZhbHVlLCAjIEVtcHR5IGtleQorPyBleHBsaWNpdAorIGtleTogdmFsdWUsCitzaW1wbGUga2V5IDogdmFsdWUsCitbIGNvbGxlY3Rpb24sIHNpbXBsZSwga2V5IF06IHZhbHVlCit9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMTAtMDguZGF0YSBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wOC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YmQ3ODgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDguZGF0YQpAQCAtMCwwICsxLDUgQEAKK3sKK211bHRpLWxpbmUKKyBzaW1wbGUga2V5IDogdmFsdWUsCit2ZXJ5IGxvbmcgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLig+MUtCKS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ga2V5OiB2YWx1ZQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTA4LmVycm9yIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTA4LmVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzllMWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDguZXJyb3IKQEAgLTAsMCArMSw1IEBACitFUlJPUjoKKy0gQSBzaW1wbGUga2V5IGlzIHJlc3RyaWN0ZWQKKyAgdG8gb25seSBvbmUgbGluZS4KKy0gQSBzaW1wbGUga2V5IG11c3Qgbm90IGJlCisgIGxvbmdlciB0aGFuIDEwMjQgY2hhcmFjdGVycy4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0wOS5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDkuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOTgyN2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMDkuY2Fub25pY2FsCkBAIC0wLDAgKzEsOCBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAia2V5IgorICA6ICEhc3RyICJ2YWx1ZSIsCisgID8gISFzdHIgImVtcHR5IgorICA6ICEhbnVsbCAiIiwKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0wOS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTA5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1NWUyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0wOS5kYXRhCkBAIC0wLDAgKzEsNCBAQAorewora2V5IDogdmFsdWUsCitlbXB0eTogIyBlbXB0eSB2YWx1ZeKGkworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTEwLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0xMC5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2ZmI2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0xMC5jYW5vbmljYWwKQEAgLTAsMCArMSwxNiBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiZXhwbGljaXQga2V5MSIKKyAgOiAhIXN0ciAiZXhwbGljaXQgdmFsdWUiLAorICA/ICEhc3RyICJleHBsaWNpdCBrZXkyIgorICA6ICEhbnVsbCAiIiwKKyAgPyAhIXN0ciAiZXhwbGljaXQga2V5MyIKKyAgOiAhIW51bGwgIiIsCisgID8gISFzdHIgInNpbXBsZSBrZXkxIgorICA6ICEhc3RyICJleHBsaWNpdCB2YWx1ZSIsCisgID8gISFzdHIgInNpbXBsZSBrZXkyIgorICA6ICEhbnVsbCAiIiwKKyAgPyAhIXN0ciAic2ltcGxlIGtleTMiCisgIDogISFudWxsICIiLAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTEwLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMTAuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODg4YjA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTEwLmRhdGEKQEAgLTAsMCArMSw4IEBACit7Cis/IGV4cGxpY2l0IGtleTEgOiBleHBsaWNpdCB2YWx1ZSwKKz8gZXhwbGljaXQga2V5MiA6ICwgIyBFeHBsaWNpdCBlbXB0eQorPyBleHBsaWNpdCBrZXkzLCAgICAgIyBFbXB0eSB2YWx1ZQorc2ltcGxlIGtleTEgOiBleHBsaWNpdCB2YWx1ZSwKK3NpbXBsZSBrZXkyIDogLCAgICAgIyBFeHBsaWNpdCBlbXB0eQorc2ltcGxlIGtleTMsICAgICAgICAgIyBFbXB0eSB2YWx1ZQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTExLmNhbm9uaWNhbCBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0xMS5jYW5vbmljYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwOTU0NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0xMS5jYW5vbmljYWwKQEAgLTAsMCArMSwyNCBAQAorJVlBTUwgMS4xCistLS0KKyEhc2VxIFsKKyAgISFtYXAgeworICAgID8gISFzdHIgImV4cGxpY2l0IGtleTEiCisgICAgOiAhIXN0ciAiZXhwbGljaXQgdmFsdWUiLAorICB9LAorICAhIW1hcCB7CisgICAgPyAhIXN0ciAiZXhwbGljaXQga2V5MiIKKyAgICA6ICEhbnVsbCAiIiwKKyAgfSwKKyAgISFtYXAgeworICAgID8gISFzdHIgImV4cGxpY2l0IGtleTMiCisgICAgOiAhIW51bGwgIiIsCisgIH0sCisgICEhbWFwIHsKKyAgICA/ICEhc3RyICJzaW1wbGUga2V5MSIKKyAgICA6ICEhc3RyICJleHBsaWNpdCB2YWx1ZSIsCisgIH0sCisgICEhbWFwIHsKKyAgICA/ICEhc3RyICJzaW1wbGUga2V5MiIKKyAgICA6ICEhbnVsbCAiIiwKKyAgfSwKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0xMS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTExLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwNTU2OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0xMS5kYXRhCkBAIC0wLDAgKzEsNyBAQAorWworPyBleHBsaWNpdCBrZXkxIDogZXhwbGljaXQgdmFsdWUsCis/IGV4cGxpY2l0IGtleTIgOiAsICMgRXhwbGljaXQgZW1wdHkKKz8gZXhwbGljaXQga2V5MywgICAgICMgSW1wbGljaXQgZW1wdHkKK3NpbXBsZSBrZXkxIDogZXhwbGljaXQgdmFsdWUsCitzaW1wbGUga2V5MiA6ICwgICAgICMgRXhwbGljaXQgZW1wdHkKK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0xMi5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMTIuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWRkNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMTIuY2Fub25pY2FsCkBAIC0wLDAgKzEsOSBAQAorJVlBTUwgMS4xCistLS0KKyEhbWFwIHsKKyAgPyAhIXN0ciAiYmxvY2siCisgIDogISFtYXAgeworICAgID8gISFzdHIgImtleSIKKyAgICA6ICEhc3RyICJ2YWx1ZSIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTEyLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMTIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTIxNDQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTEyLmRhdGEKQEAgLTAsMCArMSwzIEBACitibG9jazogIyBCbG9jaworICAgICMgbWFwcGluZworIGtleTogdmFsdWUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0xMy5jYW5vbmljYWwgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMTMuY2Fub25pY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODNjNTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMTMuY2Fub25pY2FsCkBAIC0wLDAgKzEsMTEgQEAKKyVZQU1MIDEuMQorLS0tCishIW1hcCB7CisgID8gISFzdHIgImV4cGxpY2l0IGtleSIKKyAgOiAhIW51bGwgIiIsCisgID8gISFzdHIgImJsb2NrIGtleVxuIgorICA6ICEhc2VxIFsKKyAgICAhIXN0ciAib25lIiwKKyAgICAhIXN0ciAidHdvIiwKKyAgXQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTEzLmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMTMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWI5N2RiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTEzLmRhdGEKQEAgLTAsMCArMSw1IEBACis/IGV4cGxpY2l0IGtleSAjIGltcGxpY2l0IHZhbHVlCis/IHwKKyAgYmxvY2sga2V5Cis6IC0gb25lICMgZXhwbGljaXQgaW4tbGluZQorICAtIHR3byAjIGJsb2NrIHZhbHVlCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMTAtMTQuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTE0LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdjODgwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTE0LmNhbm9uaWNhbApAQCAtMCwwICsxLDExIEBACislWUFNTCAxLjEKKy0tLQorISFtYXAgeworICA/ICEhc3RyICJwbGFpbiBrZXkiCisgIDogISFudWxsICIiLAorICA/ICEhc3RyICJxdW90ZWQga2V5IgorICA6ICEhc2VxIFsKKyAgICAhIXN0ciAib25lIiwKKyAgICAhIXN0ciAidHdvIiwKKyAgXQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zcGVjLTEwLTE0LmRhdGEgYi90ZXN0cy9kYXRhL3NwZWMtMTAtMTQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjU5OTVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTE0LmRhdGEKQEAgLTAsMCArMSw0IEBACitwbGFpbiBrZXk6ICMgZW1wdHkgdmFsdWUKKyJxdW90ZWQga2V5IjoKKy0gb25lICMgZXhwbGljaXQgbmV4dC1saW5lCistIHR3byAjIGJsb2NrIHZhbHVlCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3NwZWMtMTAtMTUuY2Fub25pY2FsIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTE1LmNhbm9uaWNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWZiYmQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTE1LmNhbm9uaWNhbApAQCAtMCwwICsxLDE4IEBACislWUFNTCAxLjEKKy0tLQorISFzZXEgWworICAhIW1hcCB7CisgICAgPyAhIXN0ciAic3VuIgorICAgIDogISFzdHIgInllbGxvdyIKKyAgfSwKKyAgISFtYXAgeworICAgID8gISFtYXAgeworICAgICAgPyAhIXN0ciAiZWFydGgiCisgICAgICA6ICEhc3RyICJibHVlIgorICAgIH0KKyAgICA6ICEhbWFwIHsKKyAgICAgID8gISFzdHIgIm1vb24iCisgICAgICA6ICEhc3RyICJ3aGl0ZSIKKyAgICB9CisgIH0KK10KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3BlYy0xMC0xNS5kYXRhIGIvdGVzdHMvZGF0YS9zcGVjLTEwLTE1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3NWNmZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvc3BlYy0xMC0xNS5kYXRhCkBAIC0wLDAgKzEsMyBAQAorLSBzdW46IHllbGxvdworLSA/IGVhcnRoOiBibHVlCisgIDogbW9vbjogd2hpdGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvc3RyLmRhdGEgYi90ZXN0cy9kYXRhL3N0ci5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmRiN2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3N0ci5kYXRhCkBAIC0wLDAgKzEgQEAKKy0gYWJjZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9zdHIuZGV0ZWN0IGIvdGVzdHMvZGF0YS9zdHIuZGV0ZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNTAyNmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3N0ci5kZXRlY3QKQEAgLTAsMCArMSBAQAordGFnOnlhbWwub3JnLDIwMDI6c3RyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3RhZ3MuZXZlbnRzIGIvdGVzdHMvZGF0YS90YWdzLmV2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjkzZGNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS90YWdzLmV2ZW50cwpAQCAtMCwwICsxLDEyIEBACistICFTdHJlYW1TdGFydAorLSAhRG9jdW1lbnRTdGFydAorLSAhU2VxdWVuY2VTdGFydAorLSAhU2NhbGFyIHsgdmFsdWU6ICdkYXRhJyB9CisjLSAhU2NhbGFyIHsgdGFnOiAnIScsIHZhbHVlOiAnZGF0YScgfQorLSAhU2NhbGFyIHsgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6c3RyJywgdmFsdWU6ICdkYXRhJyB9CistICFTY2FsYXIgeyB0YWc6ICchbXlmdW5ueXRhZycsIHZhbHVlOiAnZGF0YScgfQorLSAhU2NhbGFyIHsgdGFnOiAnIW15IXVnbHkhdGFnJywgdmFsdWU6ICdkYXRhJyB9CistICFTY2FsYXIgeyB0YWc6ICd0YWc6bXkuZG9tYWluLm9yZywyMDAyOmRhdGEhPyAjJywgdmFsdWU6ICdkYXRhJyB9CistICFTZXF1ZW5jZUVuZAorLSAhRG9jdW1lbnRFbmQKKy0gIVN0cmVhbUVuZApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0X21hcmsubWFya3MgYi90ZXN0cy9kYXRhL3Rlc3RfbWFyay5tYXJrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjA4ZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS90ZXN0X21hcmsubWFya3MKQEAgLTAsMCArMSwzOCBAQAorLS0tCisqVGhlIGZpcnN0IGxpbmUuCitUaGUgbGFzdCBsaW5lLgorLS0tCitUaGUgZmlyc3QqbGluZS4KK1RoZSBsYXN0IGxpbmUuCistLS0KK1RoZSBmaXJzdCBsaW5lLioKK1RoZSBsYXN0IGxpbmUuCistLS0KK1RoZSBmaXJzdCBsaW5lLgorKlRoZSBsYXN0IGxpbmUuCistLS0KK1RoZSBmaXJzdCBsaW5lLgorVGhlIGxhc3QqbGluZS4KKy0tLQorVGhlIGZpcnN0IGxpbmUuCitUaGUgbGFzdCBsaW5lLioKKy0tLQorVGhlIGZpcnN0IGxpbmUuCisqVGhlIHNlbGVjdGVkIGxpbmUuCitUaGUgbGFzdCBsaW5lLgorLS0tCitUaGUgZmlyc3QgbGluZS4KK1RoZSBzZWxlY3RlZCpsaW5lLgorVGhlIGxhc3QgbGluZS4KKy0tLQorVGhlIGZpcnN0IGxpbmUuCitUaGUgc2VsZWN0ZWQgbGluZS4qCitUaGUgbGFzdCBsaW5lLgorLS0tCisqVGhlIG9ubHkgbGluZS4KKy0tLQorVGhlIG9ubHkqbGluZS4KKy0tLQorVGhlIG9ubHkgbGluZS4qCistLS0KK0xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmcqTGlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpbmUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGltZXN0YW1wLWJ1Z3MuY29kZSBiL3Rlc3RzL2RhdGEvdGltZXN0YW1wLWJ1Z3MuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmM4NGNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS90aW1lc3RhbXAtYnVncy5jb2RlCkBAIC0wLDAgKzEsOCBAQAorWworICAgIFtkYXRldGltZS5kYXRldGltZSgyMDAxLCAxMiwgMTUsIDMsIDI5LCA0MywgMTAwMDAwKSwgJ1VUQy0wNTozMCddLAorICAgIFtkYXRldGltZS5kYXRldGltZSgyMDAxLCAxMiwgMTQsIDE2LCAyOSwgNDMsIDEwMDAwMCksICdVVEMrMDU6MzAnXSwKKyAgICBbZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMSwgMTIsIDE0LCAyMSwgNTksIDQzLCAxMDEwKSwgTm9uZV0sCisgICAgW2RhdGV0aW1lLmRhdGV0aW1lKDIwMDEsIDEyLCAxNCwgMjEsIDU5LCA0MywgMCwgRml4ZWRPZmZzZXQoNjAsICIrMSIpKSwgJ1VUQyswMTowMCddLAorICAgIFtkYXRldGltZS5kYXRldGltZSgyMDAxLCAxMiwgMTQsIDIxLCA1OSwgNDMsIDAsIEZpeGVkT2Zmc2V0KC05MCwgIi0xOjMwIikpLCAnVVRDLTAxOjMwJ10sCisgICAgW2RhdGV0aW1lLmRhdGV0aW1lKDIwMDUsIDcsIDgsIDE3LCAzNSwgNCwgNTE3NjAwKSwgTm9uZV0sCitdCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3RpbWVzdGFtcC1idWdzLmRhdGEgYi90ZXN0cy9kYXRhL3RpbWVzdGFtcC1idWdzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0M2QwZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvdGltZXN0YW1wLWJ1Z3MuZGF0YQpAQCAtMCwwICsxLDEyIEBACistICFNeVRpbWUKKyAgLSAyMDAxLTEyLTE0IDIxOjU5OjQzLjEwIC01OjMwCistICFNeVRpbWUKKyAgLSAyMDAxLTEyLTE0IDIxOjU5OjQzLjEwICs1OjMwCistICFNeVRpbWUKKyAgLSAyMDAxLTEyLTE0IDIxOjU5OjQzLjAwMTAxCistICFNeVRpbWUKKyAgLSAyMDAxLTEyLTE0IDIxOjU5OjQzKzEKKy0gIU15VGltZQorICAtIDIwMDEtMTItMTQgMjE6NTk6NDMtMTozMAorLSAhTXlUaW1lCisgIC0gMjAwNS0wNy0wOCAxNzozNTowNC41MTc2MDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGltZXN0YW1wLmRhdGEgYi90ZXN0cy9kYXRhL3RpbWVzdGFtcC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjE0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3RpbWVzdGFtcC5kYXRhCkBAIC0wLDAgKzEsNSBAQAorLSAyMDAxLTEyLTE1VDAyOjU5OjQzLjFaCistIDIwMDEtMTItMTR0MjE6NTk6NDMuMTAtMDU6MDAKKy0gMjAwMS0xMi0xNCAyMTo1OTo0My4xMCAtNQorLSAyMDAxLTEyLTE1IDI6NTk6NDMuMTAKKy0gMjAwMi0xMi0xNApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90aW1lc3RhbXAuZGV0ZWN0IGIvdGVzdHMvZGF0YS90aW1lc3RhbXAuZGV0ZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMTM5MzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3RpbWVzdGFtcC5kZXRlY3QKQEAgLTAsMCArMSBAQAordGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3VuYWNjZXB0YWJsZS1rZXkubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS91bmFjY2VwdGFibGUta2V5LmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ4ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS91bmFjY2VwdGFibGUta2V5LmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDQgQEAKKy0tLQorPyAtIGZvbworICAtIGJhcgorOiBiYXoKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdW5jbG9zZWQtYnJhY2tldC5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL3VuY2xvc2VkLWJyYWNrZXQubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODIwNzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3VuY2xvc2VkLWJyYWNrZXQubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsNiBAQAordGVzdDoKKyAgICAtIFsgZm9vOiBiYXIKKyMgY29tbWVudCB0aGUgcmVzdCBvZiB0aGUgc3RyZWFtIHRvIGxldCB0aGUgc2Nhbm5lciBkZXRlY3QgdGhlIHByb2JsZW0uCisjICAgIC0gYmF6CisjIndlIGNvdWxkIGhhdmUgZGV0ZWN0ZWQgdGhlIHVuY2xvc2VkIGJyYWNrZXQgb24gdGhlIGFib3ZlIGxpbmUsIGJ1dCB0aGlzIHdvdWxkIGZvcmJpZCBzdWNoIHN5bnRheCBhcyI6IHsKKyN9CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3VuY2xvc2VkLXF1b3RlZC1zY2FsYXIubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS91bmNsb3NlZC1xdW90ZWQtc2NhbGFyLmxvYWRlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTM3NDI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS91bmNsb3NlZC1xdW90ZWQtc2NhbGFyLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxLDIgQEAKKydmb28KKyBiYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdW5kZWZpbmVkLWFuY2hvci5sb2FkZXItZXJyb3IgYi90ZXN0cy9kYXRhL3VuZGVmaW5lZC1hbmNob3IubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NjkxMDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3VuZGVmaW5lZC1hbmNob3IubG9hZGVyLWVycm9yCkBAIC0wLDAgKzEsMyBAQAorLSBmb28KKy0gJmJhciBiYXoKKy0gKmJhdApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS91bmRlZmluZWQtY29uc3RydWN0b3IubG9hZGVyLWVycm9yIGIvdGVzdHMvZGF0YS91bmRlZmluZWQtY29uc3RydWN0b3IubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzdjY2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3VuZGVmaW5lZC1jb25zdHJ1Y3Rvci5sb2FkZXItZXJyb3IKQEAgLTAsMCArMSBAQAorLS0tICFmb28gYmFyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3VuZGVmaW5lZC10YWctaGFuZGxlLmxvYWRlci1lcnJvciBiL3Rlc3RzL2RhdGEvdW5kZWZpbmVkLXRhZy1oYW5kbGUubG9hZGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmEzMzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3VuZGVmaW5lZC10YWctaGFuZGxlLmxvYWRlci1lcnJvcgpAQCAtMCwwICsxIEBACistLS0gIWZvbyFiYXIgICAgYmF6CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Vua25vd24uZHVtcGVyLWVycm9yIGIvdGVzdHMvZGF0YS91bmtub3duLmR1bXBlci1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzIwNGQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS91bmtub3duLmR1bXBlci1lcnJvcgpAQCAtMCwwICsxIEBACit5YW1sLnNhZmVfZHVtcChvYmplY3QpCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Vuc3VwcG9ydGVkLXZlcnNpb24uZW1pdHRlci1lcnJvciBiL3Rlc3RzL2RhdGEvdW5zdXBwb3J0ZWQtdmVyc2lvbi5lbWl0dGVyLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YzYxOTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3Vuc3VwcG9ydGVkLXZlcnNpb24uZW1pdHRlci1lcnJvcgpAQCAtMCwwICsxLDUgQEAKKy0gIVN0cmVhbVN0YXJ0CistICFEb2N1bWVudFN0YXJ0IHsgdmVyc2lvbjogWzUsNl0gfQorLSAhU2NhbGFyIHsgdmFsdWU6IGZvbyB9CistICFEb2N1bWVudEVuZAorLSAhU3RyZWFtRW5kCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3V0ZjE2YmUuY29kZSBiL3Rlc3RzL2RhdGEvdXRmMTZiZS5jb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NWIzNzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3V0ZjE2YmUuY29kZQpAQCAtMCwwICsxIEBACisiVVRGLTE2LUJFIgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS91dGYxNmJlLmRhdGEgYi90ZXN0cy9kYXRhL3V0ZjE2YmUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGRjZmFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS91dGYxNmJlLmRhdGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS91dGYxNmxlLmNvZGUgYi90ZXN0cy9kYXRhL3V0ZjE2bGUuY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA1MzBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS91dGYxNmxlLmNvZGUKQEAgLTAsMCArMSBAQAorIlVURi0xNi1MRSIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdXRmMTZsZS5kYXRhIGIvdGVzdHMvZGF0YS91dGYxNmxlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmNWU3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvdXRmMTZsZS5kYXRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdXRmOC1pbXBsaWNpdC5jb2RlIGIvdGVzdHMvZGF0YS91dGY4LWltcGxpY2l0LmNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzMjZkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvdXRmOC1pbXBsaWNpdC5jb2RlCkBAIC0wLDAgKzEgQEAKKyJpbXBsaWNpdCBVVEYtOCIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdXRmOC1pbXBsaWNpdC5kYXRhIGIvdGVzdHMvZGF0YS91dGY4LWltcGxpY2l0LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4MDgxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvdXRmOC1pbXBsaWNpdC5kYXRhCkBAIC0wLDAgKzEgQEAKKy0tLSBpbXBsaWNpdCBVVEYtOApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS91dGY4LmNvZGUgYi90ZXN0cy9kYXRhL3V0ZjguY29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2YxMWNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS91dGY4LmNvZGUKQEAgLTAsMCArMSBAQAorIlVURi04IgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS91dGY4LmRhdGEgYi90ZXN0cy9kYXRhL3V0ZjguZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODZmNDhhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS91dGY4LmRhdGEKQEAgLTAsMCArMSBAQAor77u/LS0tIFVURi04CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3ZhbHVlLmRhdGEgYi90ZXN0cy9kYXRhL3ZhbHVlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViNzY4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvdmFsdWUuZGF0YQpAQCAtMCwwICsxIEBACistID0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdmFsdWUuZGV0ZWN0IGIvdGVzdHMvZGF0YS92YWx1ZS5kZXRlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzN2QwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvdmFsdWUuZGV0ZWN0CkBAIC0wLDAgKzEgQEAKK3RhZzp5YW1sLm9yZywyMDAyOnZhbHVlCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3lhbWwuZGF0YSBiL3Rlc3RzL2RhdGEveWFtbC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YmIzZjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3lhbWwuZGF0YQpAQCAtMCwwICsxLDMgQEAKKy0gISF5YW1sICchJworLSAhIXlhbWwgJyYnCistICEheWFtbCAnKicKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEveWFtbC5kZXRlY3QgYi90ZXN0cy9kYXRhL3lhbWwuZGV0ZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyY2YxODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3lhbWwuZGV0ZWN0CkBAIC0wLDAgKzEgQEAKK3RhZzp5YW1sLm9yZywyMDAyOnlhbWwKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEveWFtbDExLnNjaGVtYSBiL3Rlc3RzL2RhdGEveWFtbDExLnNjaGVtYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjc5MWFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS95YW1sMTEuc2NoZW1hCkBAIC0wLDAgKzEsMjY0IEBACisjIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXJscHVuay95YW1sLXRlc3Qtc2NoZW1hL2Jsb2IvbWFzdGVyL2RhdGEvc2NoZW1hLXlhbWwxMS55YW1sCistLS0KKychIWJvb2wgRkFMU0UnOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICdmYWxzZSddCisnISFib29sIEZhbHNlJzogWydib29sJywgJ2ZhbHNlKCknLCAnZmFsc2UnXQorJyEhYm9vbCBOJzogWydib29sJywgJ2ZhbHNlKCknLCAiZmFsc2UiXQorJyEhYm9vbCBOTyc6IFsnYm9vbCcsICdmYWxzZSgpJywgImZhbHNlIl0KKychIWJvb2wgTm8nOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICJmYWxzZSJdCisnISFib29sIE9GRic6IFsnYm9vbCcsICdmYWxzZSgpJywgImZhbHNlIl0KKychIWJvb2wgT04nOiBbJ2Jvb2wnLCAndHJ1ZSgpJywgInRydWUiXQorJyEhYm9vbCBPZmYnOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICJmYWxzZSJdCisnISFib29sIE9uJzogWydib29sJywgJ3RydWUoKScsICJ0cnVlIl0KKychIWJvb2wgVFJVRSc6IFsnYm9vbCcsICd0cnVlKCknLCAndHJ1ZSddCisnISFib29sIFRydWUnOiBbJ2Jvb2wnLCAndHJ1ZSgpJywgJ3RydWUnXQorJyEhYm9vbCBZJzogWydib29sJywgJ3RydWUoKScsICJ0cnVlIl0KKychIWJvb2wgWUVTJzogWydib29sJywgJ3RydWUoKScsICJ0cnVlIl0KKychIWJvb2wgWWVzJzogWydib29sJywgJ3RydWUoKScsICJ0cnVlIl0KKychIWJvb2wgZmFsc2UnOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICdmYWxzZSddCisnISFib29sIG4nOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICJmYWxzZSJdCisnISFib29sIG5vJzogWydib29sJywgJ2ZhbHNlKCknLCAiZmFsc2UiXQorJyEhYm9vbCBvZmYnOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICJmYWxzZSJdCisnISFib29sIG9uJzogWydib29sJywgJ3RydWUoKScsICJ0cnVlIl0KKychIWJvb2wgdHJ1ZSc6IFsnYm9vbCcsICd0cnVlKCknLCAndHJ1ZSddCisnISFib29sIHknOiBbJ2Jvb2wnLCAndHJ1ZSgpJywgInRydWUiXQorJyEhYm9vbCB5ZXMnOiBbJ2Jvb2wnLCAndHJ1ZSgpJywgInRydWUiXQorJyEhZmxvYXQgKy5JTkYnOiBbJ2luZicsICdpbmYoKScsICcuaW5mJ10KKychIWZsb2F0ICsuSW5mJzogWydpbmYnLCAnaW5mKCknLCAnLmluZiddCisnISFmbG9hdCArLmluZic6IFsnaW5mJywgJ2luZigpJywgJy5pbmYnXQorJyEhZmxvYXQgKzAuM2UrMyc6IFsnZmxvYXQnLCAnMzAwLjAnLCAnMzAwLjAnXQorJyEhZmxvYXQgLS5JTkYnOiBbJ2luZicsICdpbmYtbmVnKCknLCAnLS5pbmYnXQorJyEhZmxvYXQgLS5JbmYnOiBbJ2luZicsICdpbmYtbmVnKCknLCAnLS5pbmYnXQorJyEhZmxvYXQgLS5pbmYnOiBbJ2luZicsICdpbmYtbmVnKCknLCAnLS5pbmYnXQorJyEhZmxvYXQgLTMuMTQnOiBbJ2Zsb2F0JywgJy0zLjE0JywgJy0zLjE0J10KKychIWZsb2F0IC4wJzogWydmbG9hdCcsICcwLjAnLCAnMC4wJ10KKychIWZsb2F0IC4xNCc6IFsnZmxvYXQnLCAnMC4xNCcsICcwLjE0J10KKychIWZsb2F0IC4xXzQnOiBbJ2Zsb2F0JywgJzAuMTQnLCAnMC4xNCddCisnISFmbG9hdCAuM0UtMSc6IFsnZmxvYXQnLCAnMC4wMycsICcwLjAzJ10KKychIWZsb2F0IC4zZSszJzogWydmbG9hdCcsICczMDAuMCcsICczMDAuMCddCisnISFmbG9hdCAuSU5GJzogWydpbmYnLCAnaW5mKCknLCAnLmluZiddCisnISFmbG9hdCAuSW5mJzogWydpbmYnLCAnaW5mKCknLCAnLmluZiddCisnISFmbG9hdCAuTkFOJzogWyduYW4nLCAnbmFuKCknLCAnLm5hbiddCisnISFmbG9hdCAuTmFOJzogWyduYW4nLCAnbmFuKCknLCAnLm5hbiddCisnISFmbG9hdCAuaW5mJzogWydpbmYnLCAnaW5mKCknLCAnLmluZiddCisnISFmbG9hdCAubmFuJzogWyduYW4nLCAnbmFuKCknLCAnLm5hbiddCisnISFmbG9hdCAwLjAnOiBbJ2Zsb2F0JywgJzAuMCcsICcwLjAnXQorJyEhZmxvYXQgMDAxLjIzJzogWydmbG9hdCcsICcxLjIzJywgJzEuMjMnXQorJyEhZmxvYXQgMTkwOjIwOjMwLjE1JzogWydmbG9hdCcsICc2ODUyMzAuMTUnLCAnNjg1MjMwLjE1J10KKychIWZsb2F0IDMuJzogWydmbG9hdCcsICczLjAnLCAnMy4wJ10KKychIWZsb2F0IDMuMTQnOiBbJ2Zsb2F0JywgJzMuMTQnLCAnMy4xNCddCisnISFmbG9hdCAzLjNlKzMnOiBbJ2Zsb2F0JywgJzMzMDAuMCcsICczMzAwLjAnXQorJyEhZmxvYXQgODUuMjMwXzE1ZSswMyc6IFsnZmxvYXQnLCAnODUyMzAuMTUnLCAnODUyMzAuMTUnXQorJyEhZmxvYXQgODVfMjMwLjE1JzogWydmbG9hdCcsICc4NTIzMC4xNScsICc4NTIzMC4xNSddCisnISFpbnQgKzAnOiBbJ2ludCcsICcwJywgJzAnXQorJyEhaW50ICswMTAwXzIwMCc6IFsnaW50JywgJzMyODk2JywgJzMyODk2J10KKychIWludCArMGIxMDAnOiBbJ2ludCcsICc0JywgJzQnXQorJyEhaW50ICsxOTA6MjA6MzAnOiBbJ2ludCcsICc2ODUyMzAnLCAnNjg1MjMwJ10KKychIWludCArMjMnOiBbJ2ludCcsICcyMycsICcyMyddCisnISFpbnQgLTAnOiBbJ2ludCcsICcwJywgJzAnXQorJyEhaW50IC0wMTAwXzIwMCc6IFsnaW50JywgJy0zMjg5NicsICctMzI4OTYnXQorJyEhaW50IC0wYjEwMSc6IFsnaW50JywgJy01JywgJy01J10KKychIWludCAtMHgzMCc6IFsnaW50JywgJy00OCcsICctNDgnXQorJyEhaW50IC0xOTA6MjA6MzAnOiBbJ2ludCcsICctNjg1MjMwJywgJy02ODUyMzAnXQorJyEhaW50IC0yMyc6IFsnaW50JywgJy0yMycsICctMjMnXQorJyEhaW50IDAnOiBbJ2ludCcsICcwJywgJzAnXQorJyEhaW50IDAwJzogWydpbnQnLCAnMCcsICcwJ10KKychIWludCAwMDExJzogWydpbnQnLCAnOScsICc5J10KKychIWludCAwMTAnOiBbJ2ludCcsICc4JywgJzgnXQorJyEhaW50IDAyXzAnOiBbJ2ludCcsICcxNicsICcxNiddCisnISFpbnQgMDcnOiBbJ2ludCcsICc3JywgJzcnXQorJyEhaW50IDBiMCc6IFsnaW50JywgJzAnLCAnMCddCisnISFpbnQgMGIxMDBfMTAxJzogWydpbnQnLCAnMzcnLCAnMzcnXQorJyEhaW50IDB4MCc6IFsnaW50JywgJzAnLCAnMCddCisnISFpbnQgMHgxMCc6IFsnaW50JywgJzE2JywgJzE2J10KKychIWludCAweDJfMCc6IFsnaW50JywgJzMyJywgJzMyJ10KKychIWludCAweDQyJzogWydpbnQnLCAnNjYnLCAnNjYnXQorJyEhaW50IDB4YSc6IFsnaW50JywgJzEwJywgJzEwJ10KKychIWludCAxMDBfMDAwJzogWydpbnQnLCAnMTAwMDAwJywgJzEwMDAwMCddCisnISFpbnQgMTkwOjIwOjMwJzogWydpbnQnLCAnNjg1MjMwJywgJzY4NTIzMCddCisnISFpbnQgMjMnOiBbJ2ludCcsICcyMycsICcyMyddCisnISFudWxsICNlbXB0eSc6IFsnbnVsbCcsICdudWxsKCknLCAibnVsbCJdCisnISFudWxsIE5VTEwnOiBbJ251bGwnLCAnbnVsbCgpJywgIm51bGwiXQorJyEhbnVsbCBOdWxsJzogWydudWxsJywgJ251bGwoKScsICJudWxsIl0KKychIW51bGwgbnVsbCc6IFsnbnVsbCcsICdudWxsKCknLCAnbnVsbCddCisnISFudWxsIH4nOiBbJ251bGwnLCAnbnVsbCgpJywgJ251bGwnXQorJyEhc3RyICNlbXB0eSc6IFsnc3RyJywgJycsICInJyJdCisnISFzdHIgKy5JTkYnOiBbJ3N0cicsICcrLklORicsICInKy5JTkYnIl0KKychIXN0ciArLkluZic6IFsnc3RyJywgJysuSW5mJywgIicrLkluZiciXQorJyEhc3RyICsuaW5mJzogWydzdHInLCAnKy5pbmYnLCAiJysuaW5mJyJdCisnISFzdHIgKzAnOiBbJ3N0cicsICcrMCcsICInKzAnIl0KKychIXN0ciArMC4zZSszJzogWydzdHInLCAnKzAuM2UrMycsICInKzAuM2UrMyciXQorJyEhc3RyICswLjNlMyc6IFsnc3RyJywgJyswLjNlMycsICIrMC4zZTMiXQorJyEhc3RyICswMTAwXzIwMCc6IFsnc3RyJywgJyswMTAwXzIwMCcsICInKzAxMDBfMjAwJyJdCisnISFzdHIgKzBiMTAwJzogWydzdHInLCAnKzBiMTAwJywgIicrMGIxMDAnIl0KKychIXN0ciArMTkwOjIwOjMwJzogWydzdHInLCAnKzE5MDoyMDozMCcsICInKzE5MDoyMDozMCciXQorJyEhc3RyICsyMyc6IFsnc3RyJywgJysyMycsICInKzIzJyJdCisnISFzdHIgLS5JTkYnOiBbJ3N0cicsICctLklORicsICInLS5JTkYnIl0KKychIXN0ciAtLkluZic6IFsnc3RyJywgJy0uSW5mJywgIictLkluZiciXQorJyEhc3RyIC0uaW5mJzogWydzdHInLCAnLS5pbmYnLCAiJy0uaW5mJyJdCisnISFzdHIgLTAnOiBbJ3N0cicsICctMCcsICInLTAnIl0KKychIXN0ciAtMDEwMF8yMDAnOiBbJ3N0cicsICctMDEwMF8yMDAnLCAiJy0wMTAwXzIwMCciXQorJyEhc3RyIC0wYjEwMSc6IFsnc3RyJywgJy0wYjEwMScsICInLTBiMTAxJyJdCisnISFzdHIgLTB4MzAnOiBbJ3N0cicsICctMHgzMCcsICInLTB4MzAnIl0KKychIXN0ciAtMTkwOjIwOjMwJzogWydzdHInLCAnLTE5MDoyMDozMCcsICInLTE5MDoyMDozMCciXQorJyEhc3RyIC0yMyc6IFsnc3RyJywgJy0yMycsICInLTIzJyJdCisnISFzdHIgLTMuMTQnOiBbJ3N0cicsICctMy4xNCcsICInLTMuMTQnIl0KKychIXN0ciAuJzogWydzdHInLCAnLicsICcuJ10KKychIXN0ciAuMCc6IFsnc3RyJywgJy4wJywgIicuMCciXQorJyEhc3RyIC4xNCc6IFsnc3RyJywgJy4xNCcsICInLjE0JyJdCisnISFzdHIgLjFfNCc6IFsnc3RyJywgJy4xXzQnLCAiJy4xXzQnIl0KKychIXN0ciAuM0UtMSc6IFsnc3RyJywgJy4zRS0xJywgIicuM0UtMSciXQorJyEhc3RyIC4zZSszJzogWydzdHInLCAnLjNlKzMnLCAiJy4zZSszJyJdCisnISFzdHIgLjNlMyc6IFsnc3RyJywgJy4zZTMnLCAiLjNlMyJdCisnISFzdHIgLklORic6IFsnc3RyJywgJy5JTkYnLCAiJy5JTkYnIl0KKychIXN0ciAuSW5mJzogWydzdHInLCAnLkluZicsICInLkluZiciXQorJyEhc3RyIC5OQU4nOiBbJ3N0cicsICcuTkFOJywgIicuTkFOJyJdCisnISFzdHIgLk5hTic6IFsnc3RyJywgJy5OYU4nLCAiJy5OYU4nIl0KKychIXN0ciAuXyc6IFsnc3RyJywgJy5fJywgJy5fJ10KKychIXN0ciAuXzE0JzogWydzdHInLCAnLl8xNCcsICcuXzE0J10KKychIXN0ciAuaW5mJzogWydzdHInLCAnLmluZicsICInLmluZiciXQorJyEhc3RyIC5uYW4nOiBbJ3N0cicsICcubmFuJywgIicubmFuJyJdCisnISFzdHIgMCc6IFsnc3RyJywgJzAnLCAiJzAnIl0KKychIXN0ciAwLjAnOiBbJ3N0cicsICcwLjAnLCAiJzAuMCciXQorJyEhc3RyIDAuM2UzJzogWydzdHInLCAnMC4zZTMnLCAiMC4zZTMiXQorJyEhc3RyIDAwJzogWydzdHInLCAnMDAnLCAiJzAwJyJdCisnISFzdHIgMDAxLjIzJzogWydzdHInLCAnMDAxLjIzJywgIicwMDEuMjMnIl0KKychIXN0ciAwMDExJzogWydzdHInLCAnMDAxMScsICInMDAxMSciXQorJyEhc3RyIDAxMCc6IFsnc3RyJywgJzAxMCcsICInMDEwJyJdCisnISFzdHIgMDJfMCc6IFsnc3RyJywgJzAyXzAnLCAiJzAyXzAnIl0KKychIXN0ciAwNyc6IFsnc3RyJywgJzA3JywgIicwNyciXQorJyEhc3RyIDBiMCc6IFsnc3RyJywgJzBiMCcsICInMGIwJyJdCisnISFzdHIgMGIxMDBfMTAxJzogWydzdHInLCAnMGIxMDBfMTAxJywgIicwYjEwMF8xMDEnIl0KKychIXN0ciAwbzAnOiBbJ3N0cicsICcwbzAnLCAiMG8wIl0KKychIXN0ciAwbzEwJzogWydzdHInLCAnMG8xMCcsICIwbzEwIl0KKychIXN0ciAwbzcnOiBbJ3N0cicsICcwbzcnLCAiMG83Il0KKychIXN0ciAweDAnOiBbJ3N0cicsICcweDAnLCAiJzB4MCciXQorJyEhc3RyIDB4Ml8wJzogWydzdHInLCAnMHgyXzAnLCAiJzB4Ml8wJyJdCisnISFzdHIgMHhhJzogWydzdHInLCAnMHhhJywgIicweGEnIl0KKychIXN0ciAxMDBfMDAwJzogWydzdHInLCAnMTAwXzAwMCcsICInMTAwXzAwMCciXQorJyEhc3RyIDE5MDoyMDozMCc6IFsnc3RyJywgJzE5MDoyMDozMCcsICInMTkwOjIwOjMwJyJdCisnISFzdHIgMTkwOjIwOjMwLjE1JzogWydzdHInLCAnMTkwOjIwOjMwLjE1JywgIicxOTA6MjA6MzAuMTUnIl0KKychIXN0ciAyMyc6IFsnc3RyJywgJzIzJywgIicyMyciXQorJyEhc3RyIDMuJzogWydzdHInLCAnMy4nLCAiJzMuJyJdCisnISFzdHIgMy4xNCc6IFsnc3RyJywgJzMuMTQnLCAiJzMuMTQnIl0KKychIXN0ciAzLjNlKzMnOiBbJ3N0cicsICczLjNlKzMnLCAiJzMuM2UrMyciXQorJyEhc3RyIDg1LjIzMF8xNWUrMDMnOiBbJ3N0cicsICc4NS4yMzBfMTVlKzAzJywgIic4NS4yMzBfMTVlKzAzJyJdCisnISFzdHIgODVfMjMwLjE1JzogWydzdHInLCAnODVfMjMwLjE1JywgIic4NV8yMzAuMTUnIl0KKychIXN0ciBGQUxTRSc6IFsnc3RyJywgJ0ZBTFNFJywgIidGQUxTRSciXQorJyEhc3RyIEZhbHNlJzogWydzdHInLCAnRmFsc2UnLCAiJ0ZhbHNlJyJdCisnISFzdHIgTic6IFsnc3RyJywgJ04nLCAiJ04nIl0KKychIXN0ciBOTyc6IFsnc3RyJywgJ05PJywgIidOTyciXQorJyEhc3RyIE5VTEwnOiBbJ3N0cicsICdOVUxMJywgIidOVUxMJyJdCisnISFzdHIgTnVsbCc6IFsnc3RyJywgJ051bGwnLCAiJ051bGwnIl0KKychIXN0ciBPRkYnOiBbJ3N0cicsICdPRkYnLCAiJ09GRiciXQorJyEhc3RyIE9OJzogWydzdHInLCAnT04nLCAiJ09OJyJdCisnISFzdHIgT2ZmJzogWydzdHInLCAnT2ZmJywgIidPZmYnIl0KKychIXN0ciBPbic6IFsnc3RyJywgJ09uJywgIidPbiciXQorJyEhc3RyIFRSVUUnOiBbJ3N0cicsICdUUlVFJywgIidUUlVFJyJdCisnISFzdHIgVHJ1ZSc6IFsnc3RyJywgJ1RydWUnLCAiJ1RydWUnIl0KKychIXN0ciBZJzogWydzdHInLCAnWScsICInWSciXQorJyEhc3RyIFlFUyc6IFsnc3RyJywgJ1lFUycsICInWUVTJyJdCisnISFzdHIgWWVzJzogWydzdHInLCAnWWVzJywgIidZZXMnIl0KKychIXN0ciBfLl8nOiBbJ3N0cicsICdfLl8nLCAnXy5fJ10KKychIXN0ciBmYWxzZSc6IFsnc3RyJywgJ2ZhbHNlJywgIidmYWxzZSciXQorJyEhc3RyIG4nOiBbJ3N0cicsICduJywgIiduJyJdCisnISFzdHIgbm8nOiBbJ3N0cicsICdubycsICInbm8nIl0KKychIXN0ciBudWxsJzogWydzdHInLCAnbnVsbCcsICInbnVsbCciXQorJyEhc3RyIG9mZic6IFsnc3RyJywgJ29mZicsICInb2ZmJyJdCisnISFzdHIgb24nOiBbJ3N0cicsICdvbicsICInb24nIl0KKychIXN0ciB0cnVlJzogWydzdHInLCAndHJ1ZScsICIndHJ1ZSciXQorJyEhc3RyIHknOiBbJ3N0cicsICd5JywgIid5JyJdCisnISFzdHIgeWVzJzogWydzdHInLCAneWVzJywgIid5ZXMnIl0KKychIXN0ciB+JzogWydzdHInLCAnficsICInficiXQorJyNlbXB0eSc6IFsnbnVsbCcsICdudWxsKCknLCAibnVsbCJdCisnKy5JTkYnOiBbJ2luZicsICdpbmYoKScsICcuaW5mJ10KKycrLkluZic6IFsnaW5mJywgJ2luZigpJywgJy5pbmYnXQorJysuaW5mJzogWydpbmYnLCAnaW5mKCknLCAnLmluZiddCisnKzAnOiBbJ2ludCcsICcwJywgJzAnXQorJyswLjNlKzMnOiBbJ2Zsb2F0JywgJzMwMC4wJywgJzMwMC4wJ10KKycrMC4zZTMnOiBbJ3N0cicsICcrMC4zZTMnLCAnKzAuM2UzJ10KKycrMDEwMF8yMDAnOiBbJ2ludCcsICczMjg5NicsICczMjg5NiddCisnKzBiMTAwJzogWydpbnQnLCAnNCcsICc0J10KKycrMTkwOjIwOjMwJzogWydpbnQnLCAnNjg1MjMwJywgJzY4NTIzMCddCisnKzIzJzogWydpbnQnLCAnMjMnLCAnMjMnXQorJyszLjE0JzogWydmbG9hdCcsICczLjE0JywgJzMuMTQnXQorJy0uSU5GJzogWydpbmYnLCAnaW5mLW5lZygpJywgJy0uaW5mJ10KKyctLkluZic6IFsnaW5mJywgJ2luZi1uZWcoKScsICctLmluZiddCisnLS5pbmYnOiBbJ2luZicsICdpbmYtbmVnKCknLCAnLS5pbmYnXQorJy0wJzogWydpbnQnLCAnMCcsICcwJ10KKyctMDEwMF8yMDAnOiBbJ2ludCcsICctMzI4OTYnLCAnLTMyODk2J10KKyctMGIxMDEnOiBbJ2ludCcsICctNScsICctNSddCisnLTB4MzAnOiBbJ2ludCcsICctNDgnLCAnLTQ4J10KKyctMTkwOjIwOjMwJzogWydpbnQnLCAnLTY4NTIzMCcsICctNjg1MjMwJ10KKyctMjMnOiBbJ2ludCcsICctMjMnLCAnLTIzJ10KKyctMy4xNCc6IFsnZmxvYXQnLCAnLTMuMTQnLCAnLTMuMTQnXQorJy4nOiBbJ3N0cicsICcuJywgJy4nXQorJy4wJzogWydmbG9hdCcsICcwLjAnLCAnMC4wJ10KKycuMTQnOiBbJ2Zsb2F0JywgJzAuMTQnLCAnMC4xNCddCisnLjFfNCc6IFsnZmxvYXQnLCAnMC4xNCcsICcwLjE0J10KKycuM0UtMSc6IFsnZmxvYXQnLCAnMC4wMycsICcwLjAzJ10KKycuM2UrMyc6IFsnZmxvYXQnLCAnMzAwLjAnLCAnMzAwLjAnXQorJy4zZTMnOiBbJ3N0cicsICcuM2UzJywgJy4zZTMnXQorJy5JTkYnOiBbJ2luZicsICdpbmYoKScsICcuaW5mJ10KKycuSW5mJzogWydpbmYnLCAnaW5mKCknLCAnLmluZiddCisnLk5BTic6IFsnbmFuJywgJ25hbigpJywgJy5uYW4nXQorJy5OYU4nOiBbJ25hbicsICduYW4oKScsICcubmFuJ10KKycuXyc6IFsnc3RyJywgJy5fJywgJy5fJ10KKycuXzE0JzogWydzdHInLCAnLl8xNCcsICcuXzE0J10KKycuaW5mJzogWydpbmYnLCAnaW5mKCknLCAnLmluZiddCisnLm5hbic6IFsnbmFuJywgJ25hbigpJywgJy5uYW4nXQorJzAnOiBbJ2ludCcsICcwJywgJzAnXQorJzAuMCc6IFsnZmxvYXQnLCAnMC4wJywgJzAuMCddCisnMC4zZTMnOiBbJ3N0cicsICcwLjNlMycsICcwLjNlMyddCisnMDAnOiBbJ2ludCcsICcwJywgJzAnXQorJzAwMS4yMyc6IFsnZmxvYXQnLCAnMS4yMycsICcxLjIzJ10KKycwMDExJzogWydpbnQnLCAnOScsICc5J10KKycwMTAnOiBbJ2ludCcsICc4JywgJzgnXQorJzAyXzAnOiBbJ2ludCcsICcxNicsICcxNiddCisnMDcnOiBbJ2ludCcsICc3JywgJzcnXQorJzA4JzogWydzdHInLCAnMDgnLCAnMDgnXQorJzBiMCc6IFsnaW50JywgJzAnLCAnMCddCisnMGIxMDBfMTAxJzogWydpbnQnLCAnMzcnLCAnMzcnXQorJzBvMCc6IFsnc3RyJywgJzBvMCcsICcwbzAnXQorJzBvMTAnOiBbJ3N0cicsICcwbzEwJywgJzBvMTAnXQorJzBvNyc6IFsnc3RyJywgJzBvNycsICcwbzcnXQorJzB4MCc6IFsnaW50JywgJzAnLCAnMCddCisnMHgxMCc6IFsnaW50JywgJzE2JywgJzE2J10KKycweDJfMCc6IFsnaW50JywgJzMyJywgJzMyJ10KKycweDQyJzogWydpbnQnLCAnNjYnLCAnNjYnXQorJzB4YSc6IFsnaW50JywgJzEwJywgJzEwJ10KKycxMDBfMDAwJzogWydpbnQnLCAnMTAwMDAwJywgJzEwMDAwMCddCisnMTkwOjIwOjMwJzogWydpbnQnLCAnNjg1MjMwJywgJzY4NTIzMCddCisnMTkwOjIwOjMwLjE1JzogWydmbG9hdCcsICc2ODUyMzAuMTUnLCAnNjg1MjMwLjE1J10KKycyMyc6IFsnaW50JywgJzIzJywgJzIzJ10KKyczLic6IFsnZmxvYXQnLCAnMy4wJywgJzMuMCddCisnMy4xNCc6IFsnZmxvYXQnLCAnMy4xNCcsICczLjE0J10KKyczLjNlKzMnOiBbJ2Zsb2F0JywgJzMzMDAnLCAnMzMwMC4wJ10KKyczZTMnOiBbJ3N0cicsICczZTMnLCAnM2UzJ10KKyc4NS4yMzBfMTVlKzAzJzogWydmbG9hdCcsICc4NTIzMC4xNScsICc4NTIzMC4xNSddCisnODVfMjMwLjE1JzogWydmbG9hdCcsICc4NTIzMC4xNScsICc4NTIzMC4xNSddCisnRkFMU0UnOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICdmYWxzZSddCisnRmFsc2UnOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICdmYWxzZSddCisnTic6IFsnYm9vbCcsICdmYWxzZSgpJywgImZhbHNlIl0KKydOTyc6IFsnYm9vbCcsICdmYWxzZSgpJywgImZhbHNlIl0KKydOVUxMJzogWydudWxsJywgJ251bGwoKScsICJudWxsIl0KKydOdWxsJzogWydudWxsJywgJ251bGwoKScsICJudWxsIl0KKydPRkYnOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICJmYWxzZSJdCisnT04nOiBbJ2Jvb2wnLCAndHJ1ZSgpJywgInRydWUiXQorJ09mZic6IFsnYm9vbCcsICdmYWxzZSgpJywgImZhbHNlIl0KKydPbic6IFsnYm9vbCcsICd0cnVlKCknLCAidHJ1ZSJdCisnVFJVRSc6IFsnYm9vbCcsICd0cnVlKCknLCAndHJ1ZSddCisnVHJ1ZSc6IFsnYm9vbCcsICd0cnVlKCknLCAndHJ1ZSddCisnWSc6IFsnYm9vbCcsICd0cnVlKCknLCAidHJ1ZSJdCisnWUVTJzogWydib29sJywgJ3RydWUoKScsICJ0cnVlIl0KKydZZXMnOiBbJ2Jvb2wnLCAndHJ1ZSgpJywgInRydWUiXQorJ18uXyc6IFsnc3RyJywgJ18uXycsICdfLl8nXQorJ2ZhbHNlJzogWydib29sJywgJ2ZhbHNlKCknLCAnZmFsc2UnXQorJ24nOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICJmYWxzZSJdCisnbm8nOiBbJ2Jvb2wnLCAnZmFsc2UoKScsICJmYWxzZSJdCisnbnVsbCc6IFsnbnVsbCcsICdudWxsKCknLCAibnVsbCJdCisnb2ZmJzogWydib29sJywgJ2ZhbHNlKCknLCAiZmFsc2UiXQorJ29uJzogWydib29sJywgJ3RydWUoKScsICJ0cnVlIl0KKyd0cnVlJzogWydib29sJywgJ3RydWUoKScsICd0cnVlJ10KKyd5JzogWydib29sJywgJ3RydWUoKScsICJ0cnVlIl0KKyd5ZXMnOiBbJ2Jvb2wnLCAndHJ1ZSgpJywgInRydWUiXQorJ34nOiBbJ251bGwnLCAnbnVsbCgpJywgIm51bGwiXQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS95YW1sMTEuc2NoZW1hLXNraXAgYi90ZXN0cy9kYXRhL3lhbWwxMS5zY2hlbWEtc2tpcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDc4YTYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS95YW1sMTEuc2NoZW1hLXNraXAKQEAgLTAsMCArMSw3IEBACitsb2FkOiB7CisgICdZJzogMSwgJ3knOiAxLCAnTic6IDEsICduJzogMSwKKyAgJyEhYm9vbCBZJzogMSwgJyEhYm9vbCBOJzogMSwgJyEhYm9vbCBuJzogMSwgJyEhYm9vbCB5JzogMSwKKyAgfQorZHVtcDogeworICAnISFzdHIgTic6IDEsICchIXN0ciBZJzogMSwgJyEhc3RyIG4nOiAxLCAnISFzdHIgeSc6IDEsCisgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYi9jYW5vbmljYWwucHkgYi90ZXN0cy9saWIvY2Fub25pY2FsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjRlM2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvY2Fub25pY2FsLnB5CkBAIC0wLDAgKzEsMzYxIEBACisKK2ltcG9ydCB5YW1sLCB5YW1sLmNvbXBvc2VyLCB5YW1sLmNvbnN0cnVjdG9yLCB5YW1sLnJlc29sdmVyCisKK2NsYXNzIENhbm9uaWNhbEVycm9yKHlhbWwuWUFNTEVycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIENhbm9uaWNhbFNjYW5uZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBDYW5vbmljYWxFcnJvcigidXRmLTggc3RyZWFtIGlzIGV4cGVjdGVkIikKKyAgICAgICAgc2VsZi5kYXRhID0gZGF0YSsnXDAnCisgICAgICAgIHNlbGYuaW5kZXggPSAwCisgICAgICAgIHNlbGYudG9rZW5zID0gW10KKyAgICAgICAgc2VsZi5zY2FubmVkID0gRmFsc2UKKworICAgIGRlZiBjaGVja190b2tlbihzZWxmLCAqY2hvaWNlcyk6CisgICAgICAgIGlmIG5vdCBzZWxmLnNjYW5uZWQ6CisgICAgICAgICAgICBzZWxmLnNjYW4oKQorICAgICAgICBpZiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIGlmIG5vdCBjaG9pY2VzOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBmb3IgY2hvaWNlIGluIGNob2ljZXM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnRva2Vuc1swXSwgY2hvaWNlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcGVla190b2tlbihzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuc2Nhbm5lZDoKKyAgICAgICAgICAgIHNlbGYuc2NhbigpCisgICAgICAgIGlmIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudG9rZW5zWzBdCisKKyAgICBkZWYgZ2V0X3Rva2VuKHNlbGYsIGNob2ljZT1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuc2Nhbm5lZDoKKyAgICAgICAgICAgIHNlbGYuc2NhbigpCisgICAgICAgIHRva2VuID0gc2VsZi50b2tlbnMucG9wKDApCisgICAgICAgIGlmIGNob2ljZSBhbmQgbm90IGlzaW5zdGFuY2UodG9rZW4sIGNob2ljZSk6CisgICAgICAgICAgICByYWlzZSBDYW5vbmljYWxFcnJvcigidW5leHBlY3RlZCB0b2tlbiAiK3JlcHIodG9rZW4pKQorICAgICAgICByZXR1cm4gdG9rZW4KKworICAgIGRlZiBnZXRfdG9rZW5fdmFsdWUoc2VsZik6CisgICAgICAgIHRva2VuID0gc2VsZi5nZXRfdG9rZW4oKQorICAgICAgICByZXR1cm4gdG9rZW4udmFsdWUKKworICAgIGRlZiBzY2FuKHNlbGYpOgorICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoeWFtbC5TdHJlYW1TdGFydFRva2VuKE5vbmUsIE5vbmUpKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5maW5kX3Rva2VuKCkKKyAgICAgICAgICAgIGNoID0gc2VsZi5kYXRhW3NlbGYuaW5kZXhdCisgICAgICAgICAgICBpZiBjaCA9PSAnXDAnOgorICAgICAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZCh5YW1sLlN0cmVhbUVuZFRva2VuKE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGNoID09ICclJzoKKyAgICAgICAgICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoc2VsZi5zY2FuX2RpcmVjdGl2ZSgpKQorICAgICAgICAgICAgZWxpZiBjaCA9PSAnLScgYW5kIHNlbGYuZGF0YVtzZWxmLmluZGV4OnNlbGYuaW5kZXgrM10gPT0gJy0tLSc6CisgICAgICAgICAgICAgICAgc2VsZi5pbmRleCArPSAzCisgICAgICAgICAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKHlhbWwuRG9jdW1lbnRTdGFydFRva2VuKE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgZWxpZiBjaCA9PSAnWyc6CisgICAgICAgICAgICAgICAgc2VsZi5pbmRleCArPSAxCisgICAgICAgICAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKHlhbWwuRmxvd1NlcXVlbmNlU3RhcnRUb2tlbihOb25lLCBOb25lKSkKKyAgICAgICAgICAgIGVsaWYgY2ggPT0gJ3snOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZCh5YW1sLkZsb3dNYXBwaW5nU3RhcnRUb2tlbihOb25lLCBOb25lKSkKKyAgICAgICAgICAgIGVsaWYgY2ggPT0gJ10nOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZCh5YW1sLkZsb3dTZXF1ZW5jZUVuZFRva2VuKE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgZWxpZiBjaCA9PSAnfSc6CisgICAgICAgICAgICAgICAgc2VsZi5pbmRleCArPSAxCisgICAgICAgICAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKHlhbWwuRmxvd01hcHBpbmdFbmRUb2tlbihOb25lLCBOb25lKSkKKyAgICAgICAgICAgIGVsaWYgY2ggPT0gJz8nOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZCh5YW1sLktleVRva2VuKE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgZWxpZiBjaCA9PSAnOic6CisgICAgICAgICAgICAgICAgc2VsZi5pbmRleCArPSAxCisgICAgICAgICAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKHlhbWwuVmFsdWVUb2tlbihOb25lLCBOb25lKSkKKyAgICAgICAgICAgIGVsaWYgY2ggPT0gJywnOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZCh5YW1sLkZsb3dFbnRyeVRva2VuKE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgZWxpZiBjaCA9PSAnKicgb3IgY2ggPT0gJyYnOgorICAgICAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChzZWxmLnNjYW5fYWxpYXMoKSkKKyAgICAgICAgICAgIGVsaWYgY2ggPT0gJyEnOgorICAgICAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZChzZWxmLnNjYW5fdGFnKCkpCisgICAgICAgICAgICBlbGlmIGNoID09ICciJzoKKyAgICAgICAgICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoc2VsZi5zY2FuX3NjYWxhcigpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBDYW5vbmljYWxFcnJvcigiaW52YWxpZCB0b2tlbiIpCisgICAgICAgIHNlbGYuc2Nhbm5lZCA9IFRydWUKKworICAgIERJUkVDVElWRSA9ICclWUFNTCAxLjEnCisKKyAgICBkZWYgc2Nhbl9kaXJlY3RpdmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGF0YVtzZWxmLmluZGV4OnNlbGYuaW5kZXgrbGVuKHNlbGYuRElSRUNUSVZFKV0gPT0gc2VsZi5ESVJFQ1RJVkUgYW5kIFwKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGFbc2VsZi5pbmRleCtsZW4oc2VsZi5ESVJFQ1RJVkUpXSBpbiAnIFxuXDAnOgorICAgICAgICAgICAgc2VsZi5pbmRleCArPSBsZW4oc2VsZi5ESVJFQ1RJVkUpCisgICAgICAgICAgICByZXR1cm4geWFtbC5EaXJlY3RpdmVUb2tlbignWUFNTCcsICgxLCAxKSwgTm9uZSwgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIENhbm9uaWNhbEVycm9yKCJpbnZhbGlkIGRpcmVjdGl2ZSIpCisKKyAgICBkZWYgc2Nhbl9hbGlhcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kYXRhW3NlbGYuaW5kZXhdID09ICcqJzoKKyAgICAgICAgICAgIFRva2VuQ2xhc3MgPSB5YW1sLkFsaWFzVG9rZW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIFRva2VuQ2xhc3MgPSB5YW1sLkFuY2hvclRva2VuCisgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICBzdGFydCA9IHNlbGYuaW5kZXgKKyAgICAgICAgd2hpbGUgc2VsZi5kYXRhW3NlbGYuaW5kZXhdIG5vdCBpbiAnLCBcblwwJzoKKyAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICB2YWx1ZSA9IHNlbGYuZGF0YVtzdGFydDpzZWxmLmluZGV4XQorICAgICAgICByZXR1cm4gVG9rZW5DbGFzcyh2YWx1ZSwgTm9uZSwgTm9uZSkKKworICAgIGRlZiBzY2FuX3RhZyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmRleCArPSAxCisgICAgICAgIHN0YXJ0ID0gc2VsZi5pbmRleAorICAgICAgICB3aGlsZSBzZWxmLmRhdGFbc2VsZi5pbmRleF0gbm90IGluICcgXG5cMCc6CisgICAgICAgICAgICBzZWxmLmluZGV4ICs9IDEKKyAgICAgICAgdmFsdWUgPSBzZWxmLmRhdGFbc3RhcnQ6c2VsZi5pbmRleF0KKyAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgdmFsdWUgPSAnIScKKyAgICAgICAgZWxpZiB2YWx1ZVswXSA9PSAnISc6CisgICAgICAgICAgICB2YWx1ZSA9ICd0YWc6eWFtbC5vcmcsMjAwMjonK3ZhbHVlWzE6XQorICAgICAgICBlbGlmIHZhbHVlWzBdID09ICc8JyBhbmQgdmFsdWVbLTFdID09ICc+JzoKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMTotMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gJyEnK3ZhbHVlCisgICAgICAgIHJldHVybiB5YW1sLlRhZ1Rva2VuKHZhbHVlLCBOb25lLCBOb25lKQorCisgICAgUVVPVEVfQ09ERVMgPSB7CisgICAgICAgICd4JzogMiwKKyAgICAgICAgJ3UnOiA0LAorICAgICAgICAnVSc6IDgsCisgICAgfQorCisgICAgUVVPVEVfUkVQTEFDRVMgPSB7CisgICAgICAgICdcXCc6ICdcXCcsCisgICAgICAgICdcIic6ICdcIicsCisgICAgICAgICcgJzogJyAnLAorICAgICAgICAnYSc6ICdceDA3JywKKyAgICAgICAgJ2InOiAnXHgwOCcsCisgICAgICAgICdlJzogJ1x4MUInLAorICAgICAgICAnZic6ICdceDBDJywKKyAgICAgICAgJ24nOiAnXHgwQScsCisgICAgICAgICdyJzogJ1x4MEQnLAorICAgICAgICAndCc6ICdceDA5JywKKyAgICAgICAgJ3YnOiAnXHgwQicsCisgICAgICAgICdOJzogJ1x1MDA4NScsCisgICAgICAgICdMJzogJ1x1MjAyOCcsCisgICAgICAgICdQJzogJ1x1MjAyOScsCisgICAgICAgICdfJzogJ18nLAorICAgICAgICAnMCc6ICdceDAwJywKKyAgICB9CisKKyAgICBkZWYgc2Nhbl9zY2FsYXIoc2VsZik6CisgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICBjaHVua3MgPSBbXQorICAgICAgICBzdGFydCA9IHNlbGYuaW5kZXgKKyAgICAgICAgaWdub3JlX3NwYWNlcyA9IEZhbHNlCisgICAgICAgIHdoaWxlIHNlbGYuZGF0YVtzZWxmLmluZGV4XSAhPSAnIic6CisgICAgICAgICAgICBpZiBzZWxmLmRhdGFbc2VsZi5pbmRleF0gPT0gJ1xcJzoKKyAgICAgICAgICAgICAgICBpZ25vcmVfc3BhY2VzID0gRmFsc2UKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHNlbGYuZGF0YVtzdGFydDpzZWxmLmluZGV4XSkKKyAgICAgICAgICAgICAgICBzZWxmLmluZGV4ICs9IDEKKyAgICAgICAgICAgICAgICBjaCA9IHNlbGYuZGF0YVtzZWxmLmluZGV4XQorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICAgICAgICAgIGlmIGNoID09ICdcbic6CisgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9zcGFjZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBjaCBpbiBzZWxmLlFVT1RFX0NPREVTOgorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBzZWxmLlFVT1RFX0NPREVTW2NoXQorICAgICAgICAgICAgICAgICAgICBjb2RlID0gaW50KHNlbGYuZGF0YVtzZWxmLmluZGV4OnNlbGYuaW5kZXgrbGVuZ3RoXSwgMTYpCisgICAgICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoY2hyKGNvZGUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluZGV4ICs9IGxlbmd0aAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGNoIG5vdCBpbiBzZWxmLlFVT1RFX1JFUExBQ0VTOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ2Fub25pY2FsRXJyb3IoImludmFsaWQgZXNjYXBlIGNvZGUiKQorICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHNlbGYuUVVPVEVfUkVQTEFDRVNbY2hdKQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5pbmRleAorICAgICAgICAgICAgZWxpZiBzZWxmLmRhdGFbc2VsZi5pbmRleF0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHNlbGYuZGF0YVtzdGFydDpzZWxmLmluZGV4XSkKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKCcgJykKKyAgICAgICAgICAgICAgICBzZWxmLmluZGV4ICs9IDEKKyAgICAgICAgICAgICAgICBzdGFydCA9IHNlbGYuaW5kZXgKKyAgICAgICAgICAgICAgICBpZ25vcmVfc3BhY2VzID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBpZ25vcmVfc3BhY2VzIGFuZCBzZWxmLmRhdGFbc2VsZi5pbmRleF0gPT0gJyAnOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5pbmRleAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZ25vcmVfc3BhY2VzID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmluZGV4ICs9IDEKKyAgICAgICAgY2h1bmtzLmFwcGVuZChzZWxmLmRhdGFbc3RhcnQ6c2VsZi5pbmRleF0pCisgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICByZXR1cm4geWFtbC5TY2FsYXJUb2tlbignJy5qb2luKGNodW5rcyksIEZhbHNlLCBOb25lLCBOb25lKQorCisgICAgZGVmIGZpbmRfdG9rZW4oc2VsZik6CisgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgd2hpbGUgbm90IGZvdW5kOgorICAgICAgICAgICAgd2hpbGUgc2VsZi5kYXRhW3NlbGYuaW5kZXhdIGluICcgXHQnOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICAgICAgaWYgc2VsZi5kYXRhW3NlbGYuaW5kZXhdID09ICcjJzoKKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmRhdGFbc2VsZi5pbmRleF0gIT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleCArPSAxCisgICAgICAgICAgICBpZiBzZWxmLmRhdGFbc2VsZi5pbmRleF0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBzZWxmLmluZGV4ICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisKK2NsYXNzIENhbm9uaWNhbFBhcnNlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5ldmVudHMgPSBbXQorICAgICAgICBzZWxmLnBhcnNlZCA9IEZhbHNlCisKKyAgICBkZWYgZGlzcG9zZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIyBzdHJlYW06IFNUUkVBTS1TVEFSVCBkb2N1bWVudCogU1RSRUFNLUVORAorICAgIGRlZiBwYXJzZV9zdHJlYW0oc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X3Rva2VuKHlhbWwuU3RyZWFtU3RhcnRUb2tlbikKKyAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKHlhbWwuU3RyZWFtU3RhcnRFdmVudChOb25lLCBOb25lKSkKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuY2hlY2tfdG9rZW4oeWFtbC5TdHJlYW1FbmRUb2tlbik6CisgICAgICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKHlhbWwuRGlyZWN0aXZlVG9rZW4sIHlhbWwuRG9jdW1lbnRTdGFydFRva2VuKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2RvY3VtZW50KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgQ2Fub25pY2FsRXJyb3IoImRvY3VtZW50IGlzIGV4cGVjdGVkLCBnb3QgIityZXByKHNlbGYudG9rZW5zWzBdKSkKKyAgICAgICAgc2VsZi5nZXRfdG9rZW4oeWFtbC5TdHJlYW1FbmRUb2tlbikKKyAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKHlhbWwuU3RyZWFtRW5kRXZlbnQoTm9uZSwgTm9uZSkpCisKKyAgICAjIGRvY3VtZW50OiBESVJFQ1RJVkU/IERPQ1VNRU5ULVNUQVJUIG5vZGUKKyAgICBkZWYgcGFyc2VfZG9jdW1lbnQoc2VsZik6CisgICAgICAgIG5vZGUgPSBOb25lCisgICAgICAgIGlmIHNlbGYuY2hlY2tfdG9rZW4oeWFtbC5EaXJlY3RpdmVUb2tlbik6CisgICAgICAgICAgICBzZWxmLmdldF90b2tlbih5YW1sLkRpcmVjdGl2ZVRva2VuKQorICAgICAgICBzZWxmLmdldF90b2tlbih5YW1sLkRvY3VtZW50U3RhcnRUb2tlbikKKyAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKHlhbWwuRG9jdW1lbnRTdGFydEV2ZW50KE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLnBhcnNlX25vZGUoKQorICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoeWFtbC5Eb2N1bWVudEVuZEV2ZW50KE5vbmUsIE5vbmUpKQorCisgICAgIyBub2RlOiBBTElBUyB8IEFOQ0hPUj8gVEFHPyAoU0NBTEFSfHNlcXVlbmNlfG1hcHBpbmcpCisgICAgZGVmIHBhcnNlX25vZGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2hlY2tfdG9rZW4oeWFtbC5BbGlhc1Rva2VuKToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCh5YW1sLkFsaWFzRXZlbnQoc2VsZi5nZXRfdG9rZW5fdmFsdWUoKSwgTm9uZSwgTm9uZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhbmNob3IgPSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLmNoZWNrX3Rva2VuKHlhbWwuQW5jaG9yVG9rZW4pOgorICAgICAgICAgICAgICAgIGFuY2hvciA9IHNlbGYuZ2V0X3Rva2VuX3ZhbHVlKCkKKyAgICAgICAgICAgIHRhZyA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfdG9rZW4oeWFtbC5UYWdUb2tlbik6CisgICAgICAgICAgICAgICAgdGFnID0gc2VsZi5nZXRfdG9rZW5fdmFsdWUoKQorICAgICAgICAgICAgaWYgc2VsZi5jaGVja190b2tlbih5YW1sLlNjYWxhclRva2VuKToKKyAgICAgICAgICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoeWFtbC5TY2FsYXJFdmVudChhbmNob3IsIHRhZywgKEZhbHNlLCBGYWxzZSksIHNlbGYuZ2V0X3Rva2VuX3ZhbHVlKCksIE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgZWxpZiBzZWxmLmNoZWNrX3Rva2VuKHlhbWwuRmxvd1NlcXVlbmNlU3RhcnRUb2tlbik6CisgICAgICAgICAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKHlhbWwuU2VxdWVuY2VTdGFydEV2ZW50KGFuY2hvciwgdGFnLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3NlcXVlbmNlKCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5jaGVja190b2tlbih5YW1sLkZsb3dNYXBwaW5nU3RhcnRUb2tlbik6CisgICAgICAgICAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKHlhbWwuTWFwcGluZ1N0YXJ0RXZlbnQoYW5jaG9yLCB0YWcsIE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfbWFwcGluZygpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIENhbm9uaWNhbEVycm9yKCJTQ0FMQVIsICdbJywgb3IgJ3snIGlzIGV4cGVjdGVkLCBnb3QgIityZXByKHNlbGYudG9rZW5zWzBdKSkKKworICAgICMgc2VxdWVuY2U6IFNFUVVFTkNFLVNUQVJUIChub2RlIChFTlRSWSBub2RlKSopPyBFTlRSWT8gU0VRVUVOQ0UtRU5ECisgICAgZGVmIHBhcnNlX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmdldF90b2tlbih5YW1sLkZsb3dTZXF1ZW5jZVN0YXJ0VG9rZW4pCisgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKHlhbWwuRmxvd1NlcXVlbmNlRW5kVG9rZW4pOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9ub2RlKCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmNoZWNrX3Rva2VuKHlhbWwuRmxvd1NlcXVlbmNlRW5kVG9rZW4pOgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3Rva2VuKHlhbWwuRmxvd0VudHJ5VG9rZW4pCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tfdG9rZW4oeWFtbC5GbG93U2VxdWVuY2VFbmRUb2tlbik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2Vfbm9kZSgpCisgICAgICAgIHNlbGYuZ2V0X3Rva2VuKHlhbWwuRmxvd1NlcXVlbmNlRW5kVG9rZW4pCisgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCh5YW1sLlNlcXVlbmNlRW5kRXZlbnQoTm9uZSwgTm9uZSkpCisKKyAgICAjIG1hcHBpbmc6IE1BUFBJTkctU1RBUlQgKG1hcF9lbnRyeSAoRU5UUlkgbWFwX2VudHJ5KSopPyBFTlRSWT8gTUFQUElORy1FTkQKKyAgICBkZWYgcGFyc2VfbWFwcGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfdG9rZW4oeWFtbC5GbG93TWFwcGluZ1N0YXJ0VG9rZW4pCisgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrX3Rva2VuKHlhbWwuRmxvd01hcHBpbmdFbmRUb2tlbik6CisgICAgICAgICAgICBzZWxmLnBhcnNlX21hcF9lbnRyeSgpCisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5jaGVja190b2tlbih5YW1sLkZsb3dNYXBwaW5nRW5kVG9rZW4pOgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3Rva2VuKHlhbWwuRmxvd0VudHJ5VG9rZW4pCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tfdG9rZW4oeWFtbC5GbG93TWFwcGluZ0VuZFRva2VuKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9tYXBfZW50cnkoKQorICAgICAgICBzZWxmLmdldF90b2tlbih5YW1sLkZsb3dNYXBwaW5nRW5kVG9rZW4pCisgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCh5YW1sLk1hcHBpbmdFbmRFdmVudChOb25lLCBOb25lKSkKKworICAgICMgbWFwX2VudHJ5OiBLRVkgbm9kZSBWQUxVRSBub2RlCisgICAgZGVmIHBhcnNlX21hcF9lbnRyeShzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfdG9rZW4oeWFtbC5LZXlUb2tlbikKKyAgICAgICAgc2VsZi5wYXJzZV9ub2RlKCkKKyAgICAgICAgc2VsZi5nZXRfdG9rZW4oeWFtbC5WYWx1ZVRva2VuKQorICAgICAgICBzZWxmLnBhcnNlX25vZGUoKQorCisgICAgZGVmIHBhcnNlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX3N0cmVhbSgpCisgICAgICAgIHNlbGYucGFyc2VkID0gVHJ1ZQorCisgICAgZGVmIGdldF9ldmVudChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucGFyc2VkOgorICAgICAgICAgICAgc2VsZi5wYXJzZSgpCisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50cy5wb3AoMCkKKworICAgIGRlZiBjaGVja19ldmVudChzZWxmLCAqY2hvaWNlcyk6CisgICAgICAgIGlmIG5vdCBzZWxmLnBhcnNlZDoKKyAgICAgICAgICAgIHNlbGYucGFyc2UoKQorICAgICAgICBpZiBzZWxmLmV2ZW50czoKKyAgICAgICAgICAgIGlmIG5vdCBjaG9pY2VzOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBmb3IgY2hvaWNlIGluIGNob2ljZXM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmV2ZW50c1swXSwgY2hvaWNlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcGVla19ldmVudChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucGFyc2VkOgorICAgICAgICAgICAgc2VsZi5wYXJzZSgpCisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50c1swXQorCitjbGFzcyBDYW5vbmljYWxMb2FkZXIoQ2Fub25pY2FsU2Nhbm5lciwgQ2Fub25pY2FsUGFyc2VyLAorICAgICAgICB5YW1sLmNvbXBvc2VyLkNvbXBvc2VyLCB5YW1sLmNvbnN0cnVjdG9yLkNvbnN0cnVjdG9yLCB5YW1sLnJlc29sdmVyLlJlc29sdmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBpZiBoYXNhdHRyKHN0cmVhbSwgJ3JlYWQnKToKKyAgICAgICAgICAgIHN0cmVhbSA9IHN0cmVhbS5yZWFkKCkKKyAgICAgICAgQ2Fub25pY2FsU2Nhbm5lci5fX2luaXRfXyhzZWxmLCBzdHJlYW0pCisgICAgICAgIENhbm9uaWNhbFBhcnNlci5fX2luaXRfXyhzZWxmKQorICAgICAgICB5YW1sLmNvbXBvc2VyLkNvbXBvc2VyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHlhbWwuY29uc3RydWN0b3IuQ29uc3RydWN0b3IuX19pbml0X18oc2VsZikKKyAgICAgICAgeWFtbC5yZXNvbHZlci5SZXNvbHZlci5fX2luaXRfXyhzZWxmKQorCit5YW1sLkNhbm9uaWNhbExvYWRlciA9IENhbm9uaWNhbExvYWRlcgorCitkZWYgY2Fub25pY2FsX3NjYW4oc3RyZWFtKToKKyAgICByZXR1cm4geWFtbC5zY2FuKHN0cmVhbSwgTG9hZGVyPUNhbm9uaWNhbExvYWRlcikKKworeWFtbC5jYW5vbmljYWxfc2NhbiA9IGNhbm9uaWNhbF9zY2FuCisKK2RlZiBjYW5vbmljYWxfcGFyc2Uoc3RyZWFtKToKKyAgICByZXR1cm4geWFtbC5wYXJzZShzdHJlYW0sIExvYWRlcj1DYW5vbmljYWxMb2FkZXIpCisKK3lhbWwuY2Fub25pY2FsX3BhcnNlID0gY2Fub25pY2FsX3BhcnNlCisKK2RlZiBjYW5vbmljYWxfY29tcG9zZShzdHJlYW0pOgorICAgIHJldHVybiB5YW1sLmNvbXBvc2Uoc3RyZWFtLCBMb2FkZXI9Q2Fub25pY2FsTG9hZGVyKQorCit5YW1sLmNhbm9uaWNhbF9jb21wb3NlID0gY2Fub25pY2FsX2NvbXBvc2UKKworZGVmIGNhbm9uaWNhbF9jb21wb3NlX2FsbChzdHJlYW0pOgorICAgIHJldHVybiB5YW1sLmNvbXBvc2VfYWxsKHN0cmVhbSwgTG9hZGVyPUNhbm9uaWNhbExvYWRlcikKKworeWFtbC5jYW5vbmljYWxfY29tcG9zZV9hbGwgPSBjYW5vbmljYWxfY29tcG9zZV9hbGwKKworZGVmIGNhbm9uaWNhbF9sb2FkKHN0cmVhbSk6CisgICAgcmV0dXJuIHlhbWwubG9hZChzdHJlYW0sIExvYWRlcj1DYW5vbmljYWxMb2FkZXIpCisKK3lhbWwuY2Fub25pY2FsX2xvYWQgPSBjYW5vbmljYWxfbG9hZAorCitkZWYgY2Fub25pY2FsX2xvYWRfYWxsKHN0cmVhbSk6CisgICAgcmV0dXJuIHlhbWwubG9hZF9hbGwoc3RyZWFtLCBMb2FkZXI9Q2Fub25pY2FsTG9hZGVyKQorCit5YW1sLmNhbm9uaWNhbF9sb2FkX2FsbCA9IGNhbm9uaWNhbF9sb2FkX2FsbAorCmRpZmYgLS1naXQgYS90ZXN0cy9saWIvdGVzdF9hbGwucHkgYi90ZXN0cy9saWIvdGVzdF9hbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhNTA2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYi90ZXN0X2FsbC5weQpAQCAtMCwwICsxLDE1IEBACisKK2ltcG9ydCBzeXMsIHlhbWwsIHRlc3RfYXBwbGlhbmNlCisKK2RlZiBtYWluKGFyZ3M9Tm9uZSk6CisgICAgY29sbGVjdGlvbnMgPSBbXQorICAgIGltcG9ydCB0ZXN0X3lhbWwKKyAgICBjb2xsZWN0aW9ucy5hcHBlbmQodGVzdF95YW1sKQorICAgIGlmIHlhbWwuX193aXRoX2xpYnlhbWxfXzoKKyAgICAgICAgaW1wb3J0IHRlc3RfeWFtbF9leHQKKyAgICAgICAgY29sbGVjdGlvbnMuYXBwZW5kKHRlc3RfeWFtbF9leHQpCisgICAgcmV0dXJuIHRlc3RfYXBwbGlhbmNlLnJ1bihjb2xsZWN0aW9ucywgYXJncykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfYXBwbGlhbmNlLnB5IGIvdGVzdHMvbGliL3Rlc3RfYXBwbGlhbmNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWNkYTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvdGVzdF9hcHBsaWFuY2UucHkKQEAgLTAsMCArMSwxNDggQEAKKworaW1wb3J0IHN5cywgb3MsIG9zLnBhdGgsIHR5cGVzLCB0cmFjZWJhY2ssIHBwcmludAorCitEQVRBID0gJ3Rlc3RzL2RhdGEnCisKK2RlZiBmaW5kX3Rlc3RfZnVuY3Rpb25zKGNvbGxlY3Rpb25zKToKKyAgICBpZiBub3QgaXNpbnN0YW5jZShjb2xsZWN0aW9ucywgbGlzdCk6CisgICAgICAgIGNvbGxlY3Rpb25zID0gW2NvbGxlY3Rpb25zXQorICAgIGZ1bmN0aW9ucyA9IFtdCisgICAgZm9yIGNvbGxlY3Rpb24gaW4gY29sbGVjdGlvbnM6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbGxlY3Rpb24sIGRpY3QpOgorICAgICAgICAgICAgY29sbGVjdGlvbiA9IHZhcnMoY29sbGVjdGlvbikKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoY29sbGVjdGlvbik6CisgICAgICAgICAgICB2YWx1ZSA9IGNvbGxlY3Rpb25ba2V5XQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdHlwZXMuRnVuY3Rpb25UeXBlKSBhbmQgaGFzYXR0cih2YWx1ZSwgJ3VuaXR0ZXN0Jyk6CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLmFwcGVuZCh2YWx1ZSkKKyAgICByZXR1cm4gZnVuY3Rpb25zCisKK2RlZiBmaW5kX3Rlc3RfZmlsZW5hbWVzKGRpcmVjdG9yeSk6CisgICAgZmlsZW5hbWVzID0ge30KKyAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBmaWxlbmFtZSkpOgorICAgICAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIGJhc2UuZW5kc3dpdGgoJy1weTInKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmlsZW5hbWVzLnNldGRlZmF1bHQoYmFzZSwgW10pLmFwcGVuZChleHQpCisgICAgZmlsZW5hbWVzID0gc29ydGVkKGZpbGVuYW1lcy5pdGVtcygpKQorICAgIHJldHVybiBmaWxlbmFtZXMKKworZGVmIHBhcnNlX2FyZ3VtZW50cyhhcmdzKToKKyAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KKyAgICB2ZXJib3NlID0gRmFsc2UKKyAgICBpZiAnLXYnIGluIGFyZ3M6CisgICAgICAgIHZlcmJvc2UgPSBUcnVlCisgICAgICAgIGFyZ3MucmVtb3ZlKCctdicpCisgICAgaWYgJy0tdmVyYm9zZScgaW4gYXJnczoKKyAgICAgICAgdmVyYm9zZSA9IFRydWUKKyAgICAgICAgYXJncy5yZW1vdmUoJy0tdmVyYm9zZScpCisgICAgaWYgJ1lBTUxfVEVTVF9WRVJCT1NFJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICB2ZXJib3NlID0gVHJ1ZQorICAgIGluY2x1ZGVfZnVuY3Rpb25zID0gW10KKyAgICBpZiBhcmdzOgorICAgICAgICBpbmNsdWRlX2Z1bmN0aW9ucy5hcHBlbmQoYXJncy5wb3AoMCkpCisgICAgaWYgJ1lBTUxfVEVTVF9GVU5DVElPTlMnIGluIG9zLmVudmlyb246CisgICAgICAgIGluY2x1ZGVfZnVuY3Rpb25zLmV4dGVuZChvcy5lbnZpcm9uWydZQU1MX1RFU1RfRlVOQ1RJT05TJ10uc3BsaXQoKSkKKyAgICBpbmNsdWRlX2ZpbGVuYW1lcyA9IFtdCisgICAgaW5jbHVkZV9maWxlbmFtZXMuZXh0ZW5kKGFyZ3MpCisgICAgaWYgJ1lBTUxfVEVTVF9GSUxFTkFNRVMnIGluIG9zLmVudmlyb246CisgICAgICAgIGluY2x1ZGVfZmlsZW5hbWVzLmV4dGVuZChvcy5lbnZpcm9uWydZQU1MX1RFU1RfRklMRU5BTUVTJ10uc3BsaXQoKSkKKyAgICByZXR1cm4gaW5jbHVkZV9mdW5jdGlvbnMsIGluY2x1ZGVfZmlsZW5hbWVzLCB2ZXJib3NlCisKK2RlZiBleGVjdXRlKGZ1bmN0aW9uLCBmaWxlbmFtZXMsIHZlcmJvc2UpOgorICAgIG5hbWUgPSBmdW5jdGlvbi5fX25hbWVfXworICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJz0nKjc1KydcbicpCisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyVzKCVzKS4uLlxuJyAlIChuYW1lLCAnLCAnLmpvaW4oZmlsZW5hbWVzKSkpCisgICAgdHJ5OgorICAgICAgICBmdW5jdGlvbih2ZXJib3NlPXZlcmJvc2UsICpmaWxlbmFtZXMpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIGluZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBpZiBpc2luc3RhbmNlKGV4YywgQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAga2luZCA9ICdGQUlMVVJFJworICAgICAgICBlbHNlOgorICAgICAgICAgICAga2luZCA9ICdFUlJPUicKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMobGltaXQ9MSwgZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShraW5kWzBdKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgZWxzZToKKyAgICAgICAga2luZCA9ICdTVUNDRVNTJworICAgICAgICBpbmZvID0gTm9uZQorICAgICAgICBpZiBub3QgdmVyYm9zZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQorICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgIHJldHVybiAobmFtZSwgZmlsZW5hbWVzLCBraW5kLCBpbmZvKQorCitkZWYgZGlzcGxheShyZXN1bHRzLCB2ZXJib3NlKToKKyAgICBpZiByZXN1bHRzIGFuZCBub3QgdmVyYm9zZToKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgIHRvdGFsID0gbGVuKHJlc3VsdHMpCisgICAgZmFpbHVyZXMgPSAwCisgICAgZXJyb3JzID0gMAorICAgIGZvciBuYW1lLCBmaWxlbmFtZXMsIGtpbmQsIGluZm8gaW4gcmVzdWx0czoKKyAgICAgICAgaWYga2luZCA9PSAnU1VDQ0VTUyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBraW5kID09ICdGQUlMVVJFJzoKKyAgICAgICAgICAgIGZhaWx1cmVzICs9IDEKKyAgICAgICAgaWYga2luZCA9PSAnRVJST1InOgorICAgICAgICAgICAgZXJyb3JzICs9IDEKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnPScqNzUrJ1xuJykKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnJXMoJXMpOiAlc1xuJyAlIChuYW1lLCAnLCAnLmpvaW4oZmlsZW5hbWVzKSwga2luZCkpCisgICAgICAgIGlmIGtpbmQgPT0gJ0VSUk9SJzoKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24oZmlsZT1zeXMuc3Rkb3V0LCAqaW5mbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicpCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfdGIoaW5mb1syXSwgZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnJXM6IHNlZSBiZWxvd1xuJyAlIGluZm9bMF0uX19uYW1lX18pCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCd+Jyo3NSsnXG4nKQorICAgICAgICAgICAgZm9yIGFyZyBpbiBpbmZvWzFdLmFyZ3M6CisgICAgICAgICAgICAgICAgcHByaW50LnBwcmludChhcmcsIHN0cmVhbT1zeXMuc3Rkb3V0KQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLScqNzUrJ1xuJykKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyVzOlxuJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicsIGVycm9ycz0ncmVwbGFjZScpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZGF0YSA9IGZpbGUucmVhZCgpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGRhdGEpCisgICAgICAgICAgICBpZiBkYXRhIGFuZCBkYXRhWy0xXSAhPSAnXG4nOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKKyAgICBzeXMuc3Rkb3V0LndyaXRlKCc9Jyo3NSsnXG4nKQorICAgIHN5cy5zdGRvdXQud3JpdGUoJ1RFU1RTOiAlc1xuJyAlIHRvdGFsKQorICAgIGlmIGZhaWx1cmVzOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdGQUlMVVJFUzogJXNcbicgJSBmYWlsdXJlcykKKyAgICBpZiBlcnJvcnM6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ0VSUk9SUzogJXNcbicgJSBlcnJvcnMpCisgICAgcmV0dXJuIG5vdCAoZmFpbHVyZXMgb3IgZXJyb3JzKQorCitkZWYgcnVuKGNvbGxlY3Rpb25zLCBhcmdzPU5vbmUpOgorICAgIHRlc3RfZnVuY3Rpb25zID0gZmluZF90ZXN0X2Z1bmN0aW9ucyhjb2xsZWN0aW9ucykKKyAgICB0ZXN0X2ZpbGVuYW1lcyA9IGZpbmRfdGVzdF9maWxlbmFtZXMoREFUQSkKKyAgICBpbmNsdWRlX2Z1bmN0aW9ucywgaW5jbHVkZV9maWxlbmFtZXMsIHZlcmJvc2UgPSBwYXJzZV9hcmd1bWVudHMoYXJncykKKyAgICByZXN1bHRzID0gW10KKyAgICBmb3IgZnVuY3Rpb24gaW4gdGVzdF9mdW5jdGlvbnM6CisgICAgICAgIGlmIGluY2x1ZGVfZnVuY3Rpb25zIGFuZCBmdW5jdGlvbi5fX25hbWVfXyBub3QgaW4gaW5jbHVkZV9mdW5jdGlvbnM6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBmdW5jdGlvbi51bml0dGVzdCBhbmQgZnVuY3Rpb24udW5pdHRlc3QgaXMgbm90IFRydWU6CisgICAgICAgICAgICBmb3IgYmFzZSwgZXh0cyBpbiB0ZXN0X2ZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBpZiBpbmNsdWRlX2ZpbGVuYW1lcyBhbmQgYmFzZSBub3QgaW4gaW5jbHVkZV9maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZW5hbWVzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZXh0IGluIGZ1bmN0aW9uLnVuaXR0ZXN0OgorICAgICAgICAgICAgICAgICAgICBpZiBleHQgbm90IGluIGV4dHM6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZXMuYXBwZW5kKG9zLnBhdGguam9pbihEQVRBLCBiYXNlK2V4dCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9leHRzID0gZ2V0YXR0cihmdW5jdGlvbiwgJ3NraXAnLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNraXBfZXh0IGluIHNraXBfZXh0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNraXBfZXh0IGluIGV4dHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV4ZWN1dGUoZnVuY3Rpb24sIGZpbGVuYW1lcywgdmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IGV4ZWN1dGUoZnVuY3Rpb24sIFtdLCB2ZXJib3NlKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAgIHJldHVybiBkaXNwbGF5KHJlc3VsdHMsIHZlcmJvc2U9dmVyYm9zZSkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfYnVpbGQucHkgYi90ZXN0cy9saWIvdGVzdF9idWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjNmOTQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGliL3Rlc3RfYnVpbGQucHkKQEAgLTAsMCArMSwxMCBAQAorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBzeXMsIG9zLCBkaXN0dXRpbHMudXRpbAorICAgIGJ1aWxkX2xpYiA9ICdidWlsZC9saWInCisgICAgYnVpbGRfbGliX2V4dCA9IG9zLnBhdGguam9pbignYnVpbGQnLCAnbGliLnt9LXt9Lnt9Jy5mb3JtYXQoZGlzdHV0aWxzLnV0aWwuZ2V0X3BsYXRmb3JtKCksICpzeXMudmVyc2lvbl9pbmZvKSkKKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgYnVpbGRfbGliKQorICAgIHN5cy5wYXRoLmluc2VydCgwLCBidWlsZF9saWJfZXh0KQorICAgIGltcG9ydCB0ZXN0X3lhbWwsIHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKHRlc3RfeWFtbCkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfYnVpbGRfZXh0LnB5IGIvdGVzdHMvbGliL3Rlc3RfYnVpbGRfZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhODQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvdGVzdF9idWlsZF9leHQucHkKQEAgLTAsMCArMSwxMSBAQAorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHN5cywgb3MsIGRpc3R1dGlscy51dGlsCisgICAgYnVpbGRfbGliID0gJ2J1aWxkL2xpYicKKyAgICBidWlsZF9saWJfZXh0ID0gb3MucGF0aC5qb2luKCdidWlsZCcsICdsaWIue30te30ue30nLmZvcm1hdChkaXN0dXRpbHMudXRpbC5nZXRfcGxhdGZvcm0oKSwgKnN5cy52ZXJzaW9uX2luZm8pKQorICAgIHN5cy5wYXRoLmluc2VydCgwLCBidWlsZF9saWIpCisgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGJ1aWxkX2xpYl9leHQpCisgICAgaW1wb3J0IHRlc3RfeWFtbF9leHQsIHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKHRlc3RfeWFtbF9leHQpCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYi90ZXN0X2Nhbm9uaWNhbC5weSBiL3Rlc3RzL2xpYi90ZXN0X2Nhbm9uaWNhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmRlZDgxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGliL3Rlc3RfY2Fub25pY2FsLnB5CkBAIC0wLDAgKzEsNDMgQEAKKworaW1wb3J0IHlhbWwsIGNhbm9uaWNhbAorCitkZWYgdGVzdF9jYW5vbmljYWxfc2Nhbm5lcihjYW5vbmljYWxfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHdpdGggb3BlbihjYW5vbmljYWxfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGRhdGEgPSBmaWxlLnJlYWQoKQorICAgIHRva2VucyA9IGxpc3QoeWFtbC5jYW5vbmljYWxfc2NhbihkYXRhKSkKKyAgICBhc3NlcnQgdG9rZW5zLCB0b2tlbnMKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBmb3IgdG9rZW4gaW4gdG9rZW5zOgorICAgICAgICAgICAgcHJpbnQodG9rZW4pCisKK3Rlc3RfY2Fub25pY2FsX3NjYW5uZXIudW5pdHRlc3QgPSBbJy5jYW5vbmljYWwnXQorCitkZWYgdGVzdF9jYW5vbmljYWxfcGFyc2VyKGNhbm9uaWNhbF9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgd2l0aCBvcGVuKGNhbm9uaWNhbF9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgZGF0YSA9IGZpbGUucmVhZCgpCisgICAgZXZlbnRzID0gbGlzdCh5YW1sLmNhbm9uaWNhbF9wYXJzZShkYXRhKSkKKyAgICBhc3NlcnQgZXZlbnRzLCBldmVudHMKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAgcHJpbnQoZXZlbnQpCisKK3Rlc3RfY2Fub25pY2FsX3BhcnNlci51bml0dGVzdCA9IFsnLmNhbm9uaWNhbCddCisKK2RlZiB0ZXN0X2Nhbm9uaWNhbF9lcnJvcihkYXRhX2ZpbGVuYW1lLCBjYW5vbmljYWxfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHdpdGggb3BlbihkYXRhX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBkYXRhID0gZmlsZS5yZWFkKCkKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IGxpc3QoeWFtbC5jYW5vbmljYWxfbG9hZF9hbGwoZGF0YSkpCisgICAgZXhjZXB0IHlhbWwuWUFNTEVycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KGV4YykKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIikKKwordGVzdF9jYW5vbmljYWxfZXJyb3IudW5pdHRlc3QgPSBbJy5kYXRhJywgJy5jYW5vbmljYWwnXQordGVzdF9jYW5vbmljYWxfZXJyb3Iuc2tpcCA9IFsnLmVtcHR5J10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdGVzdF9hcHBsaWFuY2UKKyAgICB0ZXN0X2FwcGxpYW5jZS5ydW4oZ2xvYmFscygpKQorCmRpZmYgLS1naXQgYS90ZXN0cy9saWIvdGVzdF9jb25zdHJ1Y3Rvci5weSBiL3Rlc3RzL2xpYi90ZXN0X2NvbnN0cnVjdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ODNhMjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvdGVzdF9jb25zdHJ1Y3Rvci5weQpAQCAtMCwwICsxLDMwNCBAQAorCitpbXBvcnQgeWFtbAoraW1wb3J0IHBwcmludAorCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB5YW1sLnRva2VucworCisjIEltcG9ydCBhbnkgcGFja2FnZXMgaGVyZSB0aGF0IG5lZWQgdG8gYmUgcmVmZXJlbmNlZCBpbiAuY29kZSBmaWxlcy4KK2ltcG9ydCBzaWduYWwKKworZGVmIGV4ZWN1dGUoY29kZSk6CisgICAgZ2xvYmFsIHZhbHVlCisgICAgZXhlYyhjb2RlKQorICAgIHJldHVybiB2YWx1ZQorCitkZWYgX21ha2Vfb2JqZWN0cygpOgorICAgIGdsb2JhbCBNeUxvYWRlciwgTXlEdW1wZXIsIE15VGVzdENsYXNzMSwgTXlUZXN0Q2xhc3MyLCBNeVRlc3RDbGFzczMsIFlBTUxPYmplY3QxLCBZQU1MT2JqZWN0MiwgIFwKKyAgICAgICAgICAgIEFuT2JqZWN0LCBBbkluc3RhbmNlLCBBU3RhdGUsIEFDdXN0b21TdGF0ZSwgSW5pdEFyZ3MsIEluaXRBcmdzV2l0aFN0YXRlLCAgICBcCisgICAgICAgICAgICBOZXdBcmdzLCBOZXdBcmdzV2l0aFN0YXRlLCBSZWR1Y2UsIFJlZHVjZVdpdGhTdGF0ZSwgU2xvdHMsIE15SW50LCBNeUxpc3QsIE15RGljdCwgIFwKKyAgICAgICAgICAgIEZpeGVkT2Zmc2V0LCB0b2RheSwgZXhlY3V0ZSwgTXlGdWxsTG9hZGVyCisKKyAgICBjbGFzcyBNeUxvYWRlcih5YW1sLkxvYWRlcik6CisgICAgICAgIHBhc3MKKyAgICBjbGFzcyBNeUR1bXBlcih5YW1sLkR1bXBlcik6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIE15VGVzdENsYXNzMToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHk9MCwgej0wKToKKyAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIHNlbGYueSA9IHkKKyAgICAgICAgICAgIHNlbGYueiA9IHoKKyAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNeVRlc3RDbGFzczEpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2NsYXNzX18sIG90aGVyLl9fZGljdF9fCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGNvbnN0cnVjdDEoY29uc3RydWN0b3IsIG5vZGUpOgorICAgICAgICBtYXBwaW5nID0gY29uc3RydWN0b3IuY29uc3RydWN0X21hcHBpbmcobm9kZSkKKyAgICAgICAgcmV0dXJuIE15VGVzdENsYXNzMSgqKm1hcHBpbmcpCisgICAgZGVmIHJlcHJlc2VudDEocmVwcmVzZW50ZXIsIG5hdGl2ZSk6CisgICAgICAgIHJldHVybiByZXByZXNlbnRlci5yZXByZXNlbnRfbWFwcGluZygiIXRhZzEiLCBuYXRpdmUuX19kaWN0X18pCisKKyAgICBkZWYgbXlfdGltZV9jb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvciwgbm9kZSk6CisgICAgICAgIHNlcSA9IGNvbnN0cnVjdG9yLmNvbnN0cnVjdF9zZXF1ZW5jZShub2RlKQorICAgICAgICBkdCA9IHNlcVswXQorICAgICAgICB0eiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHogPSBkdC50emluZm8udHpuYW1lKGR0KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBbZHQsIHR6XQorCisgICAgeWFtbC5hZGRfY29uc3RydWN0b3IoIiF0YWcxIiwgY29uc3RydWN0MSwgTG9hZGVyPU15TG9hZGVyKQorICAgIHlhbWwuYWRkX2NvbnN0cnVjdG9yKCIhTXlUaW1lIiwgbXlfdGltZV9jb25zdHJ1Y3RvciwgTG9hZGVyPU15TG9hZGVyKQorICAgIHlhbWwuYWRkX3JlcHJlc2VudGVyKE15VGVzdENsYXNzMSwgcmVwcmVzZW50MSwgRHVtcGVyPU15RHVtcGVyKQorCisgICAgY2xhc3MgTXlUZXN0Q2xhc3MyKE15VGVzdENsYXNzMSwgeWFtbC5ZQU1MT2JqZWN0KToKKyAgICAgICAgeWFtbF9sb2FkZXIgPSBNeUxvYWRlcgorICAgICAgICB5YW1sX2R1bXBlciA9IE15RHVtcGVyCisgICAgICAgIHlhbWxfdGFnID0gIiF0YWcyIgorICAgICAgICBkZWYgZnJvbV95YW1sKGNscywgY29uc3RydWN0b3IsIG5vZGUpOgorICAgICAgICAgICAgeCA9IGNvbnN0cnVjdG9yLmNvbnN0cnVjdF95YW1sX2ludChub2RlKQorICAgICAgICAgICAgcmV0dXJuIGNscyh4PXgpCisgICAgICAgIGZyb21feWFtbCA9IGNsYXNzbWV0aG9kKGZyb21feWFtbCkKKyAgICAgICAgZGVmIHRvX3lhbWwoY2xzLCByZXByZXNlbnRlciwgbmF0aXZlKToKKyAgICAgICAgICAgIHJldHVybiByZXByZXNlbnRlci5yZXByZXNlbnRfc2NhbGFyKGNscy55YW1sX3RhZywgc3RyKG5hdGl2ZS54KSkKKyAgICAgICAgdG9feWFtbCA9IGNsYXNzbWV0aG9kKHRvX3lhbWwpCisKKyAgICBjbGFzcyBNeVRlc3RDbGFzczMoTXlUZXN0Q2xhc3MyKToKKyAgICAgICAgeWFtbF90YWcgPSAiIXRhZzMiCisgICAgICAgIGRlZiBmcm9tX3lhbWwoY2xzLCBjb25zdHJ1Y3Rvciwgbm9kZSk6CisgICAgICAgICAgICBtYXBwaW5nID0gY29uc3RydWN0b3IuY29uc3RydWN0X21hcHBpbmcobm9kZSkKKyAgICAgICAgICAgIGlmICc9JyBpbiBtYXBwaW5nOgorICAgICAgICAgICAgICAgIHggPSBtYXBwaW5nWyc9J10KKyAgICAgICAgICAgICAgICBkZWwgbWFwcGluZ1snPSddCisgICAgICAgICAgICAgICAgbWFwcGluZ1sneCddID0geAorICAgICAgICAgICAgcmV0dXJuIGNscygqKm1hcHBpbmcpCisgICAgICAgIGZyb21feWFtbCA9IGNsYXNzbWV0aG9kKGZyb21feWFtbCkKKyAgICAgICAgZGVmIHRvX3lhbWwoY2xzLCByZXByZXNlbnRlciwgbmF0aXZlKToKKyAgICAgICAgICAgIHJldHVybiByZXByZXNlbnRlci5yZXByZXNlbnRfbWFwcGluZyhjbHMueWFtbF90YWcsIG5hdGl2ZS5fX2RpY3RfXykKKyAgICAgICAgdG9feWFtbCA9IGNsYXNzbWV0aG9kKHRvX3lhbWwpCisKKyAgICBjbGFzcyBZQU1MT2JqZWN0MSh5YW1sLllBTUxPYmplY3QpOgorICAgICAgICB5YW1sX2xvYWRlciA9IE15TG9hZGVyCisgICAgICAgIHlhbWxfZHVtcGVyID0gTXlEdW1wZXIKKyAgICAgICAgeWFtbF90YWcgPSAnIWZvbycKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG15X3BhcmFtZXRlcj1Ob25lLCBteV9hbm90aGVyX3BhcmFtZXRlcj1Ob25lKToKKyAgICAgICAgICAgIHNlbGYubXlfcGFyYW1ldGVyID0gbXlfcGFyYW1ldGVyCisgICAgICAgICAgICBzZWxmLm15X2Fub3RoZXJfcGFyYW1ldGVyID0gbXlfYW5vdGhlcl9wYXJhbWV0ZXIKKyAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBZQU1MT2JqZWN0MSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fY2xhc3NfXywgb3RoZXIuX19kaWN0X18KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBjbGFzcyBZQU1MT2JqZWN0Mih5YW1sLllBTUxPYmplY3QpOgorICAgICAgICB5YW1sX2xvYWRlciA9IE15TG9hZGVyCisgICAgICAgIHlhbWxfZHVtcGVyID0gTXlEdW1wZXIKKyAgICAgICAgeWFtbF90YWcgPSAnIWJhcicKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbz0xLCBiYXI9MiwgYmF6PTMpOgorICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIHNlbGYuYmFyID0gYmFyCisgICAgICAgICAgICBzZWxmLmJheiA9IGJhegorICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHsxOiBzZWxmLmZvbywgMjogc2VsZi5iYXIsIDM6IHNlbGYuYmF6fQorICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgIHNlbGYuZm9vID0gc3RhdGVbMV0KKyAgICAgICAgICAgIHNlbGYuYmFyID0gc3RhdGVbMl0KKyAgICAgICAgICAgIHNlbGYuYmF6ID0gc3RhdGVbM10KKyAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBZQU1MT2JqZWN0Mik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fY2xhc3NfXywgb3RoZXIuX19kaWN0X18KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBjbGFzcyBBbk9iamVjdDoKKyAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBmb289Tm9uZSwgYmFyPU5vbmUsIGJhej1Ob25lKToKKyAgICAgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgc2VsZi5iYXIgPSBiYXIKKyAgICAgICAgICAgIHNlbGYuYmF6ID0gYmF6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gY21wKCh0eXBlKHNlbGYpLCBzZWxmLmZvbywgc2VsZi5iYXIsIHNlbGYuYmF6KSwKKyAgICAgICAgICAgICAgICAgICAgKHR5cGUob3RoZXIpLCBvdGhlci5mb28sIG90aGVyLmJhciwgb3RoZXIuYmF6KSkKKyAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKSBhbmQgICAgXAorICAgICAgICAgICAgICAgICAgICAoc2VsZi5mb28sIHNlbGYuYmFyLCBzZWxmLmJheikgPT0gKG90aGVyLmZvbywgb3RoZXIuYmFyLCBvdGhlci5iYXopCisKKyAgICBjbGFzcyBBbkluc3RhbmNlOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vPU5vbmUsIGJhcj1Ob25lLCBiYXo9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgc2VsZi5iYXIgPSBiYXIKKyAgICAgICAgICAgIHNlbGYuYmF6ID0gYmF6CisgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBjbXAoKHR5cGUoc2VsZiksIHNlbGYuZm9vLCBzZWxmLmJhciwgc2VsZi5iYXopLAorICAgICAgICAgICAgICAgICAgICAodHlwZShvdGhlciksIG90aGVyLmZvbywgb3RoZXIuYmFyLCBvdGhlci5iYXopKQorICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpIGlzIHR5cGUob3RoZXIpIGFuZCAgICBcCisgICAgICAgICAgICAgICAgICAgIChzZWxmLmZvbywgc2VsZi5iYXIsIHNlbGYuYmF6KSA9PSAob3RoZXIuZm9vLCBvdGhlci5iYXIsIG90aGVyLmJheikKKworICAgIGNsYXNzIEFTdGF0ZShBbkluc3RhbmNlKToKKyAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgJ19mb28nOiBzZWxmLmZvbywKKyAgICAgICAgICAgICAgICAnX2Jhcic6IHNlbGYuYmFyLAorICAgICAgICAgICAgICAgICdfYmF6Jzogc2VsZi5iYXosCisgICAgICAgICAgICB9CisgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgc2VsZi5mb28gPSBzdGF0ZVsnX2ZvbyddCisgICAgICAgICAgICBzZWxmLmJhciA9IHN0YXRlWydfYmFyJ10KKyAgICAgICAgICAgIHNlbGYuYmF6ID0gc3RhdGVbJ19iYXonXQorCisgICAgY2xhc3MgQUN1c3RvbVN0YXRlKEFuSW5zdGFuY2UpOgorICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLmZvbywgc2VsZi5iYXIsIHNlbGYuYmF6KQorICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgIHNlbGYuZm9vLCBzZWxmLmJhciwgc2VsZi5iYXogPSBzdGF0ZQorCisgICAgY2xhc3MgTmV3QXJncyhBbk9iamVjdCk6CisgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5mb28sIHNlbGYuYmFyLCBzZWxmLmJheikKKyAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiB7fQorCisgICAgY2xhc3MgTmV3QXJnc1dpdGhTdGF0ZShBbk9iamVjdCk6CisgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5mb28sIHNlbGYuYmFyKQorICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYmF6CisgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgc2VsZi5iYXogPSBzdGF0ZQorCisgICAgSW5pdEFyZ3MgPSBOZXdBcmdzCisKKyAgICBJbml0QXJnc1dpdGhTdGF0ZSA9IE5ld0FyZ3NXaXRoU3RhdGUKKworICAgIGNsYXNzIFJlZHVjZShBbk9iamVjdCk6CisgICAgICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCAoc2VsZi5mb28sIHNlbGYuYmFyLCBzZWxmLmJheikKKworICAgIGNsYXNzIFJlZHVjZVdpdGhTdGF0ZShBbk9iamVjdCk6CisgICAgICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCAoc2VsZi5mb28sIHNlbGYuYmFyKSwgc2VsZi5iYXoKKyAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICBzZWxmLmJheiA9IHN0YXRlCisKKyAgICBjbGFzcyBTbG90czoKKyAgICAgICAgX19zbG90c19fID0gKCJmb28iLCAiYmFyIiwgImJheiIpCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb289Tm9uZSwgYmFyPU5vbmUsIGJhej1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBzZWxmLmJhciA9IGJhcgorICAgICAgICAgICAgc2VsZi5iYXogPSBiYXoKKworICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpIGlzIHR5cGUob3RoZXIpIGFuZCBcCisgICAgICAgICAgICAgICAgKHNlbGYuZm9vLCBzZWxmLmJhciwgc2VsZi5iYXopID09IChvdGhlci5mb28sIG90aGVyLmJhciwgb3RoZXIuYmF6KQorCisgICAgY2xhc3MgTXlJbnQoaW50KToKKyAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKSBhbmQgaW50KHNlbGYpID09IGludChvdGhlcikKKworICAgIGNsYXNzIE15TGlzdChsaXN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG49MSk6CisgICAgICAgICAgICBzZWxmLmV4dGVuZChbTm9uZV0qbikKKyAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKSBhbmQgbGlzdChzZWxmKSA9PSBsaXN0KG90aGVyKQorCisgICAgY2xhc3MgTXlEaWN0KGRpY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbj0xKToKKyAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgICAgIHNlbGZba10gPSBOb25lCisgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikgaXMgdHlwZShvdGhlcikgYW5kIGRpY3Qoc2VsZikgPT0gZGljdChvdGhlcikKKworICAgIGNsYXNzIEZpeGVkT2Zmc2V0KGRhdGV0aW1lLnR6aW5mbyk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5fX29mZnNldCA9IGRhdGV0aW1lLnRpbWVkZWx0YShtaW51dGVzPW9mZnNldCkKKyAgICAgICAgICAgIHNlbGYuX19uYW1lID0gbmFtZQorICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fb2Zmc2V0CisgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19uYW1lCisgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOgorICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lLnRpbWVkZWx0YSgwKQorCisgICAgY2xhc3MgTXlGdWxsTG9hZGVyKHlhbWwuRnVsbExvYWRlcik6CisgICAgICAgIGRlZiBnZXRfc3RhdGVfa2V5c19ibGFja2xpc3Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfc3RhdGVfa2V5c19ibGFja2xpc3QoKSArIFsnXm15bWV0aG9kJCcsICded3JvbmdfLiokJ10KKworICAgIHRvZGF5ID0gZGF0ZXRpbWUuZGF0ZS50b2RheSgpCisKK2RlZiBfbG9hZF9jb2RlKGV4cHJlc3Npb24pOgorICAgIHJldHVybiBldmFsKGV4cHJlc3Npb24pCisKK2RlZiBfc2VyaWFsaXplX3ZhbHVlKGRhdGEpOgorICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgbGlzdCk6CisgICAgICAgIHJldHVybiAnWyVzXScgJSAnLCAnLmpvaW4obWFwKF9zZXJpYWxpemVfdmFsdWUsIGRhdGEpKQorICAgIGVsaWYgaXNpbnN0YW5jZShkYXRhLCBkaWN0KToKKyAgICAgICAgaXRlbXMgPSBbXQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBrZXkgPSBfc2VyaWFsaXplX3ZhbHVlKGtleSkKKyAgICAgICAgICAgIHZhbHVlID0gX3NlcmlhbGl6ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgIGl0ZW1zLmFwcGVuZCgiJXM6ICVzIiAlIChrZXksIHZhbHVlKSkKKyAgICAgICAgaXRlbXMuc29ydCgpCisgICAgICAgIHJldHVybiAneyVzfScgJSAnLCAnLmpvaW4oaXRlbXMpCisgICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGRhdGV0aW1lLmRhdGV0aW1lKToKKyAgICAgICAgcmV0dXJuIHJlcHIoZGF0YS51dGN0aW1ldHVwbGUoKSkKKyAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgZmxvYXQpIGFuZCBkYXRhICE9IGRhdGE6CisgICAgICAgIHJldHVybiAnPycKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisKK2RlZiB0ZXN0X2NvbnN0cnVjdG9yX3R5cGVzKGRhdGFfZmlsZW5hbWUsIGNvZGVfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIF9tYWtlX29iamVjdHMoKQorICAgIG5hdGl2ZTEgPSBOb25lCisgICAgbmF0aXZlMiA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihkYXRhX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgbmF0aXZlMSA9IGxpc3QoeWFtbC5sb2FkX2FsbChmaWxlLCBMb2FkZXI9TXlMb2FkZXIpKQorICAgICAgICBpZiBsZW4obmF0aXZlMSkgPT0gMToKKyAgICAgICAgICAgIG5hdGl2ZTEgPSBuYXRpdmUxWzBdCisgICAgICAgIHdpdGggb3Blbihjb2RlX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgbmF0aXZlMiA9IF9sb2FkX2NvZGUoZmlsZS5yZWFkKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5hdGl2ZTEgPT0gbmF0aXZlMjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJTRVJJQUxJWkVEIE5BVElWRTE6IikKKyAgICAgICAgICAgIHByaW50KF9zZXJpYWxpemVfdmFsdWUobmF0aXZlMSkpCisgICAgICAgICAgICBwcmludCgiU0VSSUFMSVpFRCBOQVRJVkUyOiIpCisgICAgICAgICAgICBwcmludChfc2VyaWFsaXplX3ZhbHVlKG5hdGl2ZTIpKQorICAgICAgICBhc3NlcnQgX3NlcmlhbGl6ZV92YWx1ZShuYXRpdmUxKSA9PSBfc2VyaWFsaXplX3ZhbHVlKG5hdGl2ZTIpLCAobmF0aXZlMSwgbmF0aXZlMikKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIk5BVElWRTE6IikKKyAgICAgICAgICAgIHBwcmludC5wcHJpbnQobmF0aXZlMSkKKyAgICAgICAgICAgIHByaW50KCJOQVRJVkUyOiIpCisgICAgICAgICAgICBwcHJpbnQucHByaW50KG5hdGl2ZTIpCisKK3Rlc3RfY29uc3RydWN0b3JfdHlwZXMudW5pdHRlc3QgPSBbJy5kYXRhJywgJy5jb2RlJ10KKworZGVmIHRlc3Rfc3ViY2xhc3NfYmxhY2tsaXN0X3R5cGVzKGRhdGFfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIF9tYWtlX29iamVjdHMoKQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICB5YW1sLmxvYWQoZmlsZS5yZWFkKCksIE15RnVsbExvYWRlcikKKyAgICBleGNlcHQgeWFtbC5ZQU1MRXJyb3IgYXMgZXhjOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIiVzOiIgJSBleGMuX19jbGFzc19fLl9fbmFtZV9fLCBleGMpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpCisKK3Rlc3Rfc3ViY2xhc3NfYmxhY2tsaXN0X3R5cGVzLnVuaXR0ZXN0ID0gWycuc3ViY2xhc3NfYmxhY2tsaXN0J10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzLCB0ZXN0X2NvbnN0cnVjdG9yCisgICAgc3lzLm1vZHVsZXNbJ3Rlc3RfY29uc3RydWN0b3InXSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisgICAgaW1wb3J0IHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKGdsb2JhbHMoKSkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfZHVtcF9sb2FkLnB5IGIvdGVzdHMvbGliL3Rlc3RfZHVtcF9sb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjEwYjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvdGVzdF9kdW1wX2xvYWQucHkKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IHlhbWwKKworZGVmIHRlc3RfZHVtcCh2ZXJib3NlPUZhbHNlKToKKyAgICBhc3NlcnQgeWFtbC5kdW1wKFsnZm9vJ10pCit0ZXN0X2R1bXAudW5pdHRlc3QgPSBUcnVlCisKK2RlZiB0ZXN0X2xvYWRfbm9fbG9hZGVyKHZlcmJvc2U9RmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgeWFtbC5sb2FkKCItIGZvb1xuIikKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGFzc2VydChGYWxzZSwgImxvYWQoKSByZXF1aXJlIExvYWRlcj0uLi4iKQordGVzdF9sb2FkX25vX2xvYWRlci51bml0dGVzdCA9IFRydWUKKworZGVmIHRlc3RfbG9hZF9zYWZlbG9hZGVyKHZlcmJvc2U9RmFsc2UpOgorICAgIGFzc2VydCB5YW1sLmxvYWQoIi0gZm9vXG4iLCBMb2FkZXI9eWFtbC5TYWZlTG9hZGVyKQordGVzdF9sb2FkX3NhZmVsb2FkZXIudW5pdHRlc3QgPSBUcnVlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHN5cywgdGVzdF9sb2FkCisgICAgc3lzLm1vZHVsZXNbJ3Rlc3RfbG9hZCddID0gc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10KKyAgICBpbXBvcnQgdGVzdF9hcHBsaWFuY2UKKyAgICB0ZXN0X2FwcGxpYW5jZS5ydW4oZ2xvYmFscygpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfZW1pdHRlci5weSBiL3Rlc3RzL2xpYi90ZXN0X2VtaXR0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViYTBhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYi90ZXN0X2VtaXR0ZXIucHkKQEAgLTAsMCArMSwxMDQgQEAKKworaW1wb3J0IHlhbWwKKworZGVmIF9jb21wYXJlX2V2ZW50cyhldmVudHMxLCBldmVudHMyKToKKyAgICBhc3NlcnQgbGVuKGV2ZW50czEpID09IGxlbihldmVudHMyKSwgKGV2ZW50czEsIGV2ZW50czIpCisgICAgZm9yIGV2ZW50MSwgZXZlbnQyIGluIHppcChldmVudHMxLCBldmVudHMyKToKKyAgICAgICAgYXNzZXJ0IGV2ZW50MS5fX2NsYXNzX18gPT0gZXZlbnQyLl9fY2xhc3NfXywgKGV2ZW50MSwgZXZlbnQyKQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50MSwgeWFtbC5Ob2RlRXZlbnQpOgorICAgICAgICAgICAgYXNzZXJ0IGV2ZW50MS5hbmNob3IgPT0gZXZlbnQyLmFuY2hvciwgKGV2ZW50MSwgZXZlbnQyKQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50MSwgeWFtbC5Db2xsZWN0aW9uU3RhcnRFdmVudCk6CisgICAgICAgICAgICBhc3NlcnQgZXZlbnQxLnRhZyA9PSBldmVudDIudGFnLCAoZXZlbnQxLCBldmVudDIpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQxLCB5YW1sLlNjYWxhckV2ZW50KToKKyAgICAgICAgICAgIGlmIFRydWUgbm90IGluIGV2ZW50MS5pbXBsaWNpdCtldmVudDIuaW1wbGljaXQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGV2ZW50MS50YWcgPT0gZXZlbnQyLnRhZywgKGV2ZW50MSwgZXZlbnQyKQorICAgICAgICAgICAgYXNzZXJ0IGV2ZW50MS52YWx1ZSA9PSBldmVudDIudmFsdWUsIChldmVudDEsIGV2ZW50MikKKworZGVmIHRlc3RfZW1pdHRlcl9vbl9kYXRhKGRhdGFfZmlsZW5hbWUsIGNhbm9uaWNhbF9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGV2ZW50cyA9IGxpc3QoeWFtbC5wYXJzZShmaWxlKSkKKyAgICBvdXRwdXQgPSB5YW1sLmVtaXQoZXZlbnRzKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50KCJPVVRQVVQ6IikKKyAgICAgICAgcHJpbnQob3V0cHV0KQorICAgIG5ld19ldmVudHMgPSBsaXN0KHlhbWwucGFyc2Uob3V0cHV0KSkKKyAgICBfY29tcGFyZV9ldmVudHMoZXZlbnRzLCBuZXdfZXZlbnRzKQorCit0ZXN0X2VtaXR0ZXJfb25fZGF0YS51bml0dGVzdCA9IFsnLmRhdGEnLCAnLmNhbm9uaWNhbCddCisKK2RlZiB0ZXN0X2VtaXR0ZXJfb25fY2Fub25pY2FsKGNhbm9uaWNhbF9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgd2l0aCBvcGVuKGNhbm9uaWNhbF9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgZXZlbnRzID0gbGlzdCh5YW1sLnBhcnNlKGZpbGUpKQorICAgIGZvciBjYW5vbmljYWwgaW4gW0ZhbHNlLCBUcnVlXToKKyAgICAgICAgb3V0cHV0ID0geWFtbC5lbWl0KGV2ZW50cywgY2Fub25pY2FsPWNhbm9uaWNhbCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJPVVRQVVQgKGNhbm9uaWNhbD0lcyk6IiAlIGNhbm9uaWNhbCkKKyAgICAgICAgICAgIHByaW50KG91dHB1dCkKKyAgICAgICAgbmV3X2V2ZW50cyA9IGxpc3QoeWFtbC5wYXJzZShvdXRwdXQpKQorICAgICAgICBfY29tcGFyZV9ldmVudHMoZXZlbnRzLCBuZXdfZXZlbnRzKQorCit0ZXN0X2VtaXR0ZXJfb25fY2Fub25pY2FsLnVuaXR0ZXN0ID0gWycuY2Fub25pY2FsJ10KKworZGVmIHRlc3RfZW1pdHRlcl9zdHlsZXMoZGF0YV9maWxlbmFtZSwgY2Fub25pY2FsX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICBmb3IgZmlsZW5hbWUgaW4gW2RhdGFfZmlsZW5hbWUsIGNhbm9uaWNhbF9maWxlbmFtZV06CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIGV2ZW50cyA9IGxpc3QoeWFtbC5wYXJzZShmaWxlKSkKKyAgICAgICAgZm9yIGZsb3dfc3R5bGUgaW4gW0ZhbHNlLCBUcnVlXToKKyAgICAgICAgICAgIGZvciBzdHlsZSBpbiBbJ3wnLCAnPicsICciJywgJ1wnJywgJyddOgorICAgICAgICAgICAgICAgIHN0eWxlZF9ldmVudHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIHlhbWwuU2NhbGFyRXZlbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSB5YW1sLlNjYWxhckV2ZW50KGV2ZW50LmFuY2hvciwgZXZlbnQudGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5pbXBsaWNpdCwgZXZlbnQudmFsdWUsIHN0eWxlPXN0eWxlKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIHlhbWwuU2VxdWVuY2VTdGFydEV2ZW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0geWFtbC5TZXF1ZW5jZVN0YXJ0RXZlbnQoZXZlbnQuYW5jaG9yLCBldmVudC50YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmltcGxpY2l0LCBmbG93X3N0eWxlPWZsb3dfc3R5bGUpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgeWFtbC5NYXBwaW5nU3RhcnRFdmVudCk6CisgICAgICAgICAgICAgICAgICAgICAgICBldmVudCA9IHlhbWwuTWFwcGluZ1N0YXJ0RXZlbnQoZXZlbnQuYW5jaG9yLCBldmVudC50YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmltcGxpY2l0LCBmbG93X3N0eWxlPWZsb3dfc3R5bGUpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlZF9ldmVudHMuYXBwZW5kKGV2ZW50KQorICAgICAgICAgICAgICAgIG91dHB1dCA9IHlhbWwuZW1pdChzdHlsZWRfZXZlbnRzKQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJPVVRQVVQgKGZpbGVuYW1lPSVyLCBmbG93X3N0eWxlPSVyLCBzdHlsZT0lcikiICUgKGZpbGVuYW1lLCBmbG93X3N0eWxlLCBzdHlsZSkpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG91dHB1dCkKKyAgICAgICAgICAgICAgICBuZXdfZXZlbnRzID0gbGlzdCh5YW1sLnBhcnNlKG91dHB1dCkpCisgICAgICAgICAgICAgICAgX2NvbXBhcmVfZXZlbnRzKGV2ZW50cywgbmV3X2V2ZW50cykKKwordGVzdF9lbWl0dGVyX3N0eWxlcy51bml0dGVzdCA9IFsnLmRhdGEnLCAnLmNhbm9uaWNhbCddCisKK2NsYXNzIEV2ZW50c0xvYWRlcih5YW1sLkxvYWRlcik6CisKKyAgICBkZWYgY29uc3RydWN0X2V2ZW50KHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIHlhbWwuU2NhbGFyTm9kZSk6CisgICAgICAgICAgICBtYXBwaW5nID0ge30KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcHBpbmcgPSBzZWxmLmNvbnN0cnVjdF9tYXBwaW5nKG5vZGUpCisgICAgICAgIGNsYXNzX25hbWUgPSBzdHIobm9kZS50YWdbMTpdKSsnRXZlbnQnCisgICAgICAgIGlmIGNsYXNzX25hbWUgaW4gWydBbGlhc0V2ZW50JywgJ1NjYWxhckV2ZW50JywgJ1NlcXVlbmNlU3RhcnRFdmVudCcsICdNYXBwaW5nU3RhcnRFdmVudCddOgorICAgICAgICAgICAgbWFwcGluZy5zZXRkZWZhdWx0KCdhbmNob3InLCBOb25lKQorICAgICAgICBpZiBjbGFzc19uYW1lIGluIFsnU2NhbGFyRXZlbnQnLCAnU2VxdWVuY2VTdGFydEV2ZW50JywgJ01hcHBpbmdTdGFydEV2ZW50J106CisgICAgICAgICAgICBtYXBwaW5nLnNldGRlZmF1bHQoJ3RhZycsIE5vbmUpCisgICAgICAgIGlmIGNsYXNzX25hbWUgaW4gWydTZXF1ZW5jZVN0YXJ0RXZlbnQnLCAnTWFwcGluZ1N0YXJ0RXZlbnQnXToKKyAgICAgICAgICAgIG1hcHBpbmcuc2V0ZGVmYXVsdCgnaW1wbGljaXQnLCBUcnVlKQorICAgICAgICBpZiBjbGFzc19uYW1lID09ICdTY2FsYXJFdmVudCc6CisgICAgICAgICAgICBtYXBwaW5nLnNldGRlZmF1bHQoJ2ltcGxpY2l0JywgKEZhbHNlLCBUcnVlKSkKKyAgICAgICAgICAgIG1hcHBpbmcuc2V0ZGVmYXVsdCgndmFsdWUnLCAnJykKKyAgICAgICAgdmFsdWUgPSBnZXRhdHRyKHlhbWwsIGNsYXNzX25hbWUpKCoqbWFwcGluZykKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKK0V2ZW50c0xvYWRlci5hZGRfY29uc3RydWN0b3IoTm9uZSwgRXZlbnRzTG9hZGVyLmNvbnN0cnVjdF9ldmVudCkKKworZGVmIHRlc3RfZW1pdHRlcl9ldmVudHMoZXZlbnRzX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICB3aXRoIG9wZW4oZXZlbnRzX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBldmVudHMgPSBsaXN0KHlhbWwubG9hZChmaWxlLCBMb2FkZXI9RXZlbnRzTG9hZGVyKSkKKyAgICBvdXRwdXQgPSB5YW1sLmVtaXQoZXZlbnRzKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50KCJPVVRQVVQ6IikKKyAgICAgICAgcHJpbnQob3V0cHV0KQorICAgIG5ld19ldmVudHMgPSBsaXN0KHlhbWwucGFyc2Uob3V0cHV0KSkKKyAgICBfY29tcGFyZV9ldmVudHMoZXZlbnRzLCBuZXdfZXZlbnRzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB0ZXN0X2FwcGxpYW5jZQorICAgIHRlc3RfYXBwbGlhbmNlLnJ1bihnbG9iYWxzKCkpCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYi90ZXN0X2Vycm9ycy5weSBiL3Rlc3RzL2xpYi90ZXN0X2Vycm9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYyMzNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGliL3Rlc3RfZXJyb3JzLnB5CkBAIC0wLDAgKzEsNzEgQEAKKworaW1wb3J0IHlhbWwsIHRlc3RfZW1pdHRlcgorCitkZWYgdGVzdF9sb2FkZXJfZXJyb3IoZXJyb3JfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGVycm9yX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgbGlzdCh5YW1sLmxvYWRfYWxsKGZpbGUsIHlhbWwuRnVsbExvYWRlcikpCisgICAgZXhjZXB0IHlhbWwuWUFNTEVycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCIlczoiICUgZXhjLl9fY2xhc3NfXy5fX25hbWVfXywgZXhjKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKQorCit0ZXN0X2xvYWRlcl9lcnJvci51bml0dGVzdCA9IFsnLmxvYWRlci1lcnJvciddCisKK2RlZiB0ZXN0X2xvYWRlcl9lcnJvcl9zdHJpbmcoZXJyb3JfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGVycm9yX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgbGlzdCh5YW1sLmxvYWRfYWxsKGZpbGUucmVhZCgpLCB5YW1sLkZ1bGxMb2FkZXIpKQorICAgIGV4Y2VwdCB5YW1sLllBTUxFcnJvciBhcyBleGM6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiJXM6IiAlIGV4Yy5fX2NsYXNzX18uX19uYW1lX18sIGV4YykKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIikKKwordGVzdF9sb2FkZXJfZXJyb3Jfc3RyaW5nLnVuaXR0ZXN0ID0gWycubG9hZGVyLWVycm9yJ10KKworZGVmIHRlc3RfbG9hZGVyX2Vycm9yX3NpbmdsZShlcnJvcl9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZXJyb3JfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICB5YW1sLmxvYWQoZmlsZS5yZWFkKCksIHlhbWwuRnVsbExvYWRlcikKKyAgICBleGNlcHQgeWFtbC5ZQU1MRXJyb3IgYXMgZXhjOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIiVzOiIgJSBleGMuX19jbGFzc19fLl9fbmFtZV9fLCBleGMpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpCisKK3Rlc3RfbG9hZGVyX2Vycm9yX3NpbmdsZS51bml0dGVzdCA9IFsnLnNpbmdsZS1sb2FkZXItZXJyb3InXQorCitkZWYgdGVzdF9lbWl0dGVyX2Vycm9yKGVycm9yX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICB3aXRoIG9wZW4oZXJyb3JfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGV2ZW50cyA9IGxpc3QoeWFtbC5sb2FkKGZpbGUsIExvYWRlcj10ZXN0X2VtaXR0ZXIuRXZlbnRzTG9hZGVyKSkKKyAgICB0cnk6CisgICAgICAgIHlhbWwuZW1pdChldmVudHMpCisgICAgZXhjZXB0IHlhbWwuWUFNTEVycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCIlczoiICUgZXhjLl9fY2xhc3NfXy5fX25hbWVfXywgZXhjKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKQorCit0ZXN0X2VtaXR0ZXJfZXJyb3IudW5pdHRlc3QgPSBbJy5lbWl0dGVyLWVycm9yJ10KKworZGVmIHRlc3RfZHVtcGVyX2Vycm9yKGVycm9yX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICB3aXRoIG9wZW4oZXJyb3JfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGNvZGUgPSBmaWxlLnJlYWQoKQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHlhbWwKKyAgICAgICAgZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKyAgICAgICAgZXhlYyhjb2RlKQorICAgIGV4Y2VwdCB5YW1sLllBTUxFcnJvciBhcyBleGM6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiJXM6IiAlIGV4Yy5fX2NsYXNzX18uX19uYW1lX18sIGV4YykKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIikKKwordGVzdF9kdW1wZXJfZXJyb3IudW5pdHRlc3QgPSBbJy5kdW1wZXItZXJyb3InXQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB0ZXN0X2FwcGxpYW5jZQorICAgIHRlc3RfYXBwbGlhbmNlLnJ1bihnbG9iYWxzKCkpCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYi90ZXN0X2lucHV0X291dHB1dC5weSBiL3Rlc3RzL2xpYi90ZXN0X2lucHV0X291dHB1dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDgyYzBkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGliL3Rlc3RfaW5wdXRfb3V0cHV0LnB5CkBAIC0wLDAgKzEsMTQxIEBACisKK2ltcG9ydCB5YW1sCitpbXBvcnQgY29kZWNzLCBpbywgdGVtcGZpbGUsIG9zLCBvcy5wYXRoCisKK2RlZiB0ZXN0X3VuaWNvZGVfaW5wdXQodW5pY29kZV9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgd2l0aCBvcGVuKHVuaWNvZGVfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGRhdGEgPSBmaWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICB2YWx1ZSA9ICcgJy5qb2luKGRhdGEuc3BsaXQoKSkKKyAgICBvdXRwdXQgPSB5YW1sLmZ1bGxfbG9hZChkYXRhKQorICAgIGFzc2VydCBvdXRwdXQgPT0gdmFsdWUsIChvdXRwdXQsIHZhbHVlKQorICAgIG91dHB1dCA9IHlhbWwuZnVsbF9sb2FkKGlvLlN0cmluZ0lPKGRhdGEpKQorICAgIGFzc2VydCBvdXRwdXQgPT0gdmFsdWUsIChvdXRwdXQsIHZhbHVlKQorICAgIGZvciBpbnB1dCBpbiBbZGF0YS5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5CT01fVVRGOCtkYXRhLmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgICAgICAgICAgY29kZWNzLkJPTV9VVEYxNl9CRStkYXRhLmVuY29kZSgndXRmLTE2LWJlJyksCisgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5CT01fVVRGMTZfTEUrZGF0YS5lbmNvZGUoJ3V0Zi0xNi1sZScpXToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJJTlBVVDoiLCByZXByKGlucHV0WzoxMF0pLCAiLi4uIikKKyAgICAgICAgb3V0cHV0ID0geWFtbC5mdWxsX2xvYWQoaW5wdXQpCisgICAgICAgIGFzc2VydCBvdXRwdXQgPT0gdmFsdWUsIChvdXRwdXQsIHZhbHVlKQorICAgICAgICBvdXRwdXQgPSB5YW1sLmZ1bGxfbG9hZChpby5CeXRlc0lPKGlucHV0KSkKKyAgICAgICAgYXNzZXJ0IG91dHB1dCA9PSB2YWx1ZSwgKG91dHB1dCwgdmFsdWUpCisKK3Rlc3RfdW5pY29kZV9pbnB1dC51bml0dGVzdCA9IFsnLnVuaWNvZGUnXQorCitkZWYgdGVzdF91bmljb2RlX2lucHV0X2Vycm9ycyh1bmljb2RlX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICB3aXRoIG9wZW4odW5pY29kZV9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgZGF0YSA9IGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgIGZvciBpbnB1dCBpbiBbZGF0YS5lbmNvZGUoJ3V0Zi0xNi1iZScpLAorICAgICAgICAgICAgZGF0YS5lbmNvZGUoJ3V0Zi0xNi1sZScpLAorICAgICAgICAgICAgY29kZWNzLkJPTV9VVEY4K2RhdGEuZW5jb2RlKCd1dGYtMTYtYmUnKSwKKyAgICAgICAgICAgIGNvZGVjcy5CT01fVVRGOCtkYXRhLmVuY29kZSgndXRmLTE2LWxlJyldOgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlhbWwuZnVsbF9sb2FkKGlucHV0KQorICAgICAgICBleGNlcHQgeWFtbC5ZQU1MRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludChleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWFtbC5mdWxsX2xvYWQoaW8uQnl0ZXNJTyhpbnB1dCkpCisgICAgICAgIGV4Y2VwdCB5YW1sLllBTUxFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKQorCit0ZXN0X3VuaWNvZGVfaW5wdXRfZXJyb3JzLnVuaXR0ZXN0ID0gWycudW5pY29kZSddCisKK2RlZiB0ZXN0X3VuaWNvZGVfb3V0cHV0KHVuaWNvZGVfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHdpdGggb3Blbih1bmljb2RlX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBkYXRhID0gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgdmFsdWUgPSAnICcuam9pbihkYXRhLnNwbGl0KCkpCisgICAgZm9yIGFsbG93X3VuaWNvZGUgaW4gW0ZhbHNlLCBUcnVlXToKKyAgICAgICAgZGF0YTEgPSB5YW1sLmR1bXAodmFsdWUsIGFsbG93X3VuaWNvZGU9YWxsb3dfdW5pY29kZSkKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIFtOb25lLCAndXRmLTgnLCAndXRmLTE2LWJlJywgJ3V0Zi0xNi1sZSddOgorICAgICAgICAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKQorICAgICAgICAgICAgeWFtbC5kdW1wKHZhbHVlLCBzdHJlYW0sIGVuY29kaW5nPWVuY29kaW5nLCBhbGxvd191bmljb2RlPWFsbG93X3VuaWNvZGUpCisgICAgICAgICAgICBkYXRhMiA9IHN0cmVhbS5nZXR2YWx1ZSgpCisgICAgICAgICAgICBkYXRhMyA9IHlhbWwuZHVtcCh2YWx1ZSwgZW5jb2Rpbmc9ZW5jb2RpbmcsIGFsbG93X3VuaWNvZGU9YWxsb3dfdW5pY29kZSkKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEzLCBieXRlcykKKyAgICAgICAgICAgICAgICBkYXRhMyA9IGRhdGEzLmRlY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIHN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlhbWwuZHVtcCh2YWx1ZSwgc3RyZWFtLCBlbmNvZGluZz1lbmNvZGluZywgYWxsb3dfdW5pY29kZT1hbGxvd191bmljb2RlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZXhjKQorICAgICAgICAgICAgICAgICAgICBkYXRhNCA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWFtbC5kdW1wKHZhbHVlLCBzdHJlYW0sIGVuY29kaW5nPWVuY29kaW5nLCBhbGxvd191bmljb2RlPWFsbG93X3VuaWNvZGUpCisgICAgICAgICAgICAgICAgZGF0YTQgPSBzdHJlYW0uZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJCWVRFUzoiLCBkYXRhNFs6NTBdKQorICAgICAgICAgICAgICAgIGRhdGE0ID0gZGF0YTQuZGVjb2RlKGVuY29kaW5nKQorCisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhMSwgc3RyKSwgKHR5cGUoZGF0YTEpLCBlbmNvZGluZykKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEyLCBzdHIpLCAodHlwZShkYXRhMiksIGVuY29kaW5nKQorCit0ZXN0X3VuaWNvZGVfb3V0cHV0LnVuaXR0ZXN0ID0gWycudW5pY29kZSddCisKK2RlZiB0ZXN0X2ZpbGVfb3V0cHV0KHVuaWNvZGVfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHdpdGggb3Blbih1bmljb2RlX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBkYXRhID0gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgaGFuZGxlLCBmaWxlbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgIG9zLmNsb3NlKGhhbmRsZSkKKyAgICB0cnk6CisgICAgICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgeWFtbC5kdW1wKGRhdGEsIHN0cmVhbSwgYWxsb3dfdW5pY29kZT1UcnVlKQorICAgICAgICBkYXRhMSA9IHN0cmVhbS5nZXR2YWx1ZSgpCisgICAgICAgIHN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICB5YW1sLmR1bXAoZGF0YSwgc3RyZWFtLCBlbmNvZGluZz0ndXRmLTE2LWxlJywgYWxsb3dfdW5pY29kZT1UcnVlKQorICAgICAgICBkYXRhMiA9IHN0cmVhbS5nZXR2YWx1ZSgpLmRlY29kZSgndXRmLTE2LWxlJylbMTpdCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnLCBlbmNvZGluZz0ndXRmLTE2LWxlJykgYXMgc3RyZWFtOgorICAgICAgICAgICAgeWFtbC5kdW1wKGRhdGEsIHN0cmVhbSwgYWxsb3dfdW5pY29kZT1UcnVlKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJywgZW5jb2Rpbmc9J3V0Zi0xNi1sZScpIGFzIGZpbGU6CisgICAgICAgICAgICBkYXRhMyA9IGZpbGUucmVhZCgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgc3RyZWFtOgorICAgICAgICAgICAgeWFtbC5kdW1wKGRhdGEsIHN0cmVhbSwgZW5jb2Rpbmc9J3V0Zi04JywgYWxsb3dfdW5pY29kZT1UcnVlKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZmlsZToKKyAgICAgICAgICAgIGRhdGE0ID0gZmlsZS5yZWFkKCkKKyAgICAgICAgYXNzZXJ0IGRhdGExID09IGRhdGEyLCAoZGF0YTEsIGRhdGEyKQorICAgICAgICBhc3NlcnQgZGF0YTEgPT0gZGF0YTMsIChkYXRhMSwgZGF0YTMpCisgICAgICAgIGFzc2VydCBkYXRhMSA9PSBkYXRhNCwgKGRhdGExLCBkYXRhNCkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCisKK3Rlc3RfZmlsZV9vdXRwdXQudW5pdHRlc3QgPSBbJy51bmljb2RlJ10KKworZGVmIHRlc3RfdW5pY29kZV90cmFuc2Zlcih1bmljb2RlX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICB3aXRoIG9wZW4odW5pY29kZV9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgZGF0YSA9IGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgIGZvciBlbmNvZGluZyBpbiBbTm9uZSwgJ3V0Zi04JywgJ3V0Zi0xNi1iZScsICd1dGYtMTYtbGUnXToKKyAgICAgICAgaW5wdXQgPSBkYXRhCisgICAgICAgIGlmIGVuY29kaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5wdXQgPSAoJ1x1ZmVmZicraW5wdXQpLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgb3V0cHV0MSA9IHlhbWwuZW1pdCh5YW1sLnBhcnNlKGlucHV0KSwgYWxsb3dfdW5pY29kZT1UcnVlKQorICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyZWFtID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHlhbWwuZW1pdCh5YW1sLnBhcnNlKGlucHV0KSwgc3RyZWFtLCBhbGxvd191bmljb2RlPVRydWUpCisgICAgICAgIG91dHB1dDIgPSBzdHJlYW0uZ2V0dmFsdWUoKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdXRwdXQxLCBzdHIpLCAodHlwZShvdXRwdXQxKSwgZW5jb2RpbmcpCisgICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdXRwdXQyLCBzdHIpLCAodHlwZShvdXRwdXQxKSwgZW5jb2RpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdXRwdXQyLCBieXRlcyksICh0eXBlKG91dHB1dDEpLCBlbmNvZGluZykKKyAgICAgICAgICAgIG91dHB1dDIuZGVjb2RlKGVuY29kaW5nKQorCit0ZXN0X3VuaWNvZGVfdHJhbnNmZXIudW5pdHRlc3QgPSBbJy51bmljb2RlJ10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdGVzdF9hcHBsaWFuY2UKKyAgICB0ZXN0X2FwcGxpYW5jZS5ydW4oZ2xvYmFscygpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfbWFyay5weSBiL3Rlc3RzL2xpYi90ZXN0X21hcmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkODQxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYi90ZXN0X21hcmsucHkKQEAgLTAsMCArMSwzMyBAQAorCitpbXBvcnQgeWFtbAorCitkZWYgdGVzdF9tYXJrcyhtYXJrc19maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgd2l0aCBvcGVuKG1hcmtzX2ZpbGVuYW1lLCAncicpIGFzIGZpbGU6CisgICAgICAgIGlucHV0cyA9IGZpbGUucmVhZCgpLnNwbGl0KCctLS1cbicpWzE6XQorICAgIGZvciBpbnB1dCBpbiBpbnB1dHM6CisgICAgICAgIGluZGV4ID0gMAorICAgICAgICBsaW5lID0gMAorICAgICAgICBjb2x1bW4gPSAwCisgICAgICAgIHdoaWxlIGlucHV0W2luZGV4XSAhPSAnKic6CisgICAgICAgICAgICBpZiBpbnB1dFtpbmRleF0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBsaW5lICs9IDEKKyAgICAgICAgICAgICAgICBjb2x1bW4gPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbHVtbiArPSAxCisgICAgICAgICAgICBpbmRleCArPSAxCisgICAgICAgIG1hcmsgPSB5YW1sLk1hcmsobWFya3NfZmlsZW5hbWUsIGluZGV4LCBsaW5lLCBjb2x1bW4sIGlucHV0LCBpbmRleCkKKyAgICAgICAgc25pcHBldCA9IG1hcmsuZ2V0X3NuaXBwZXQoaW5kZW50PTIsIG1heF9sZW5ndGg9NzkpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludChzbmlwcGV0KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzbmlwcGV0LCBzdHIpLCB0eXBlKHNuaXBwZXQpCisgICAgICAgIGFzc2VydCBzbmlwcGV0LmNvdW50KCdcbicpID09IDEsIHNuaXBwZXQuY291bnQoJ1xuJykKKyAgICAgICAgZGF0YSwgcG9pbnRlciA9IHNuaXBwZXQuc3BsaXQoJ1xuJykKKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSA8IDgyLCBsZW4oZGF0YSkKKyAgICAgICAgYXNzZXJ0IGRhdGFbbGVuKHBvaW50ZXIpLTFdID09ICcqJywgZGF0YVtsZW4ocG9pbnRlciktMV0KKwordGVzdF9tYXJrcy51bml0dGVzdCA9IFsnLm1hcmtzJ10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdGVzdF9hcHBsaWFuY2UKKyAgICB0ZXN0X2FwcGxpYW5jZS5ydW4oZ2xvYmFscygpKQorCmRpZmYgLS1naXQgYS90ZXN0cy9saWIvdGVzdF9tdWx0aV9jb25zdHJ1Y3Rvci5weSBiL3Rlc3RzL2xpYi90ZXN0X211bHRpX2NvbnN0cnVjdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZmYyY2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvdGVzdF9tdWx0aV9jb25zdHJ1Y3Rvci5weQpAQCAtMCwwICsxLDY1IEBACitpbXBvcnQgeWFtbAoraW1wb3J0IHBwcmludAoraW1wb3J0IHN5cworCitkZWYgX2xvYWRfY29kZShleHByZXNzaW9uKToKKyAgICByZXR1cm4gZXZhbChleHByZXNzaW9uKQorCitkZWYgbXljb25zdHJ1Y3RvcjEoY29uc3RydWN0b3IsIHRhZywgbm9kZSk6CisgICAgc2VxID0gY29uc3RydWN0b3IuY29uc3RydWN0X3NlcXVlbmNlKG5vZGUpCisgICAgcmV0dXJuIHt0YWc6IHNlcSB9CisKK2RlZiBteWNvbnN0cnVjdG9yMihjb25zdHJ1Y3RvciwgdGFnLCBub2RlKToKKyAgICBzZXEgPSBjb25zdHJ1Y3Rvci5jb25zdHJ1Y3Rfc2VxdWVuY2Uobm9kZSkKKyAgICBzdHJpbmcgPSAnJworICAgIHRyeToKKyAgICAgICAgaSA9IHRhZy5pbmRleCgnIScpICsgMQorICAgIGV4Y2VwdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaSA9IHRhZy5yaW5kZXgoJzonKSArIDEKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgIGlmIGkgPj0gMDoKKyAgICAgICAgdGFnID0gdGFnW2k6XQorICAgIHJldHVybiB7IHRhZzogc2VxIH0KKworY2xhc3MgTXVsdGkxKHlhbWwuRnVsbExvYWRlcik6CisgICAgcGFzcworY2xhc3MgTXVsdGkyKHlhbWwuRnVsbExvYWRlcik6CisgICAgcGFzcworCitkZWYgdGVzdF9tdWx0aV9jb25zdHJ1Y3RvcihpbnB1dF9maWxlbmFtZSwgY29kZV9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgd2l0aCBvcGVuKGlucHV0X2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBpbnB1dCA9IGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgIHdpdGggb3Blbihjb2RlX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBuYXRpdmUgPSBfbG9hZF9jb2RlKGZpbGUucmVhZCgpKQorCisgICAgIyBkZWZhdWx0IG11bHRpIGNvbnN0cnVjdG9yIGZvciAhIGFuZCAhISB0YWdzCisgICAgTXVsdGkxLmFkZF9tdWx0aV9jb25zdHJ1Y3RvcignIScsIG15Y29uc3RydWN0b3IxKQorICAgIE11bHRpMS5hZGRfbXVsdGlfY29uc3RydWN0b3IoJ3RhZzp5YW1sLm9yZywyMDAyOicsIG15Y29uc3RydWN0b3IxKQorCisgICAgZGF0YSA9IHlhbWwubG9hZChpbnB1dCwgTG9hZGVyPU11bHRpMSkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCgnTXVsdGkxOicpCisgICAgICAgIHByaW50KGRhdGEpCisgICAgICAgIHByaW50KG5hdGl2ZSkKKyAgICBhc3NlcnQoZGF0YSA9PSBuYXRpdmUpCisKKworICAgICMgZGVmYXVsdCBtdWx0aSBjb25zdHJ1Y3RvciBmb3IgYWxsIHRhZ3MKKyAgICBNdWx0aTIuYWRkX211bHRpX2NvbnN0cnVjdG9yKE5vbmUsIG15Y29uc3RydWN0b3IyKQorCisgICAgZGF0YSA9IHlhbWwubG9hZChpbnB1dCwgTG9hZGVyPU11bHRpMikKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCgnTXVsdGkyOicpCisgICAgICAgIHByaW50KGRhdGEpCisgICAgICAgIHByaW50KG5hdGl2ZSkKKyAgICBhc3NlcnQoZGF0YSA9PSBuYXRpdmUpCisKKwordGVzdF9tdWx0aV9jb25zdHJ1Y3Rvci51bml0dGVzdCA9IFsnLm11bHRpJywgJy5jb2RlJ10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdGVzdF9hcHBsaWFuY2UKKyAgICB0ZXN0X2FwcGxpYW5jZS5ydW4oZ2xvYmFscygpKQorCmRpZmYgLS1naXQgYS90ZXN0cy9saWIvdGVzdF9yZWFkZXIucHkgYi90ZXN0cy9saWIvdGVzdF9yZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4ODc0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYi90ZXN0X3JlYWRlci5weQpAQCAtMCwwICsxLDM4IEBACisKK2ltcG9ydCB5YW1sLnJlYWRlcgorCitkZWYgX3J1bl9yZWFkZXIoZGF0YSwgdmVyYm9zZSk6CisgICAgdHJ5OgorICAgICAgICBzdHJlYW0gPSB5YW1sLnJlYWRlci5SZWFkZXIoZGF0YSkKKyAgICAgICAgd2hpbGUgc3RyZWFtLnBlZWsoKSAhPSAnXDAnOgorICAgICAgICAgICAgc3RyZWFtLmZvcndhcmQoKQorICAgIGV4Y2VwdCB5YW1sLnJlYWRlci5SZWFkZXJFcnJvciBhcyBleGM6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludChleGMpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpCisKK2RlZiB0ZXN0X3N0cmVhbV9lcnJvcihlcnJvcl9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgd2l0aCBvcGVuKGVycm9yX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBfcnVuX3JlYWRlcihmaWxlLCB2ZXJib3NlKQorICAgIHdpdGggb3BlbihlcnJvcl9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgX3J1bl9yZWFkZXIoZmlsZS5yZWFkKCksIHZlcmJvc2UpCisgICAgZm9yIGVuY29kaW5nIGluIFsndXRmLTgnLCAndXRmLTE2LWxlJywgJ3V0Zi0xNi1iZSddOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZXJyb3JfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZGF0YSA9IGZpbGUucmVhZCgpLmRlY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuCisgICAgX3J1bl9yZWFkZXIoZGF0YSwgdmVyYm9zZSkKKyAgICB3aXRoIG9wZW4oZXJyb3JfZmlsZW5hbWUsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmaWxlOgorICAgICAgICBfcnVuX3JlYWRlcihmaWxlLCB2ZXJib3NlKQorCit0ZXN0X3N0cmVhbV9lcnJvci51bml0dGVzdCA9IFsnLnN0cmVhbS1lcnJvciddCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKGdsb2JhbHMoKSkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfcmVjdXJzaXZlLnB5IGIvdGVzdHMvbGliL3Rlc3RfcmVjdXJzaXZlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyN2IyNTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvdGVzdF9yZWN1cnNpdmUucHkKQEAgLTAsMCArMSw1MiBAQAorCitpbXBvcnQgeWFtbAorCitjbGFzcyBBbkluc3RhbmNlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbywgYmFyKToKKyAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgc2VsZi5iYXIgPSBiYXIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuICIlcyhmb289JXIsIGJhcj0lcikiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmZvbywgc2VsZi5iYXIpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gIiVzKGZvbz0uLi4sIGJhcj0uLi4pIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKK2NsYXNzIEFuSW5zdGFuY2VXaXRoU3RhdGUoQW5JbnN0YW5jZSk6CisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4geydhdHRyaWJ1dGVzJzogW3NlbGYuZm9vLCBzZWxmLmJhcl19CisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgc2VsZi5mb28sIHNlbGYuYmFyID0gc3RhdGVbJ2F0dHJpYnV0ZXMnXQorCitkZWYgdGVzdF9yZWN1cnNpdmUocmVjdXJzaXZlX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICBjb250ZXh0ID0gZ2xvYmFscygpLmNvcHkoKQorICAgIHdpdGggb3BlbihyZWN1cnNpdmVfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGV4ZWMoZmlsZS5yZWFkKCksIGNvbnRleHQpCisgICAgdmFsdWUxID0gY29udGV4dFsndmFsdWUnXQorICAgIG91dHB1dDEgPSBOb25lCisgICAgdmFsdWUyID0gTm9uZQorICAgIG91dHB1dDIgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQxID0geWFtbC5kdW1wKHZhbHVlMSkKKyAgICAgICAgdmFsdWUyID0geWFtbC51bnNhZmVfbG9hZChvdXRwdXQxKQorICAgICAgICBvdXRwdXQyID0geWFtbC5kdW1wKHZhbHVlMikKKyAgICAgICAgYXNzZXJ0IG91dHB1dDEgPT0gb3V0cHV0MiwgKG91dHB1dDEsIG91dHB1dDIpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJWQUxVRTE6IiwgdmFsdWUxKQorICAgICAgICAgICAgcHJpbnQoIlZBTFVFMjoiLCB2YWx1ZTIpCisgICAgICAgICAgICBwcmludCgiT1VUUFVUMToiKQorICAgICAgICAgICAgcHJpbnQob3V0cHV0MSkKKyAgICAgICAgICAgIHByaW50KCJPVVRQVVQyOiIpCisgICAgICAgICAgICBwcmludChvdXRwdXQyKQorCit0ZXN0X3JlY3Vyc2l2ZS51bml0dGVzdCA9IFsnLnJlY3Vyc2l2ZSddCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKGdsb2JhbHMoKSkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfcmVwcmVzZW50ZXIucHkgYi90ZXN0cy9saWIvdGVzdF9yZXByZXNlbnRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzA5NWJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGliL3Rlc3RfcmVwcmVzZW50ZXIucHkKQEAgLTAsMCArMSw0NCBAQAorCitpbXBvcnQgeWFtbAoraW1wb3J0IHRlc3RfY29uc3RydWN0b3IKK2ltcG9ydCBwcHJpbnQKKworZGVmIHRlc3RfcmVwcmVzZW50ZXJfdHlwZXMoY29kZV9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgdGVzdF9jb25zdHJ1Y3Rvci5fbWFrZV9vYmplY3RzKCkKKyAgICBmb3IgYWxsb3dfdW5pY29kZSBpbiBbRmFsc2UsIFRydWVdOgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gWyd1dGYtOCcsICd1dGYtMTYtYmUnLCAndXRmLTE2LWxlJ106CisgICAgICAgICAgICB3aXRoIG9wZW4oY29kZV9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICBuYXRpdmUxID0gdGVzdF9jb25zdHJ1Y3Rvci5fbG9hZF9jb2RlKGZpbGUucmVhZCgpKQorICAgICAgICAgICAgbmF0aXZlMiA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSB5YW1sLmR1bXAobmF0aXZlMSwgRHVtcGVyPXRlc3RfY29uc3RydWN0b3IuTXlEdW1wZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfdW5pY29kZT1hbGxvd191bmljb2RlLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgICAgICAgICBuYXRpdmUyID0geWFtbC5sb2FkKG91dHB1dCwgTG9hZGVyPXRlc3RfY29uc3RydWN0b3IuTXlMb2FkZXIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBuYXRpdmUxID09IG5hdGl2ZTI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB2YWx1ZTEgPSB0ZXN0X2NvbnN0cnVjdG9yLl9zZXJpYWxpemVfdmFsdWUobmF0aXZlMSkKKyAgICAgICAgICAgICAgICB2YWx1ZTIgPSB0ZXN0X2NvbnN0cnVjdG9yLl9zZXJpYWxpemVfdmFsdWUobmF0aXZlMikKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiU0VSSUFMSVpFRCBOQVRJVkUxOiIpCisgICAgICAgICAgICAgICAgICAgIHByaW50KHZhbHVlMSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNFUklBTElaRUQgTkFUSVZFMjoiKQorICAgICAgICAgICAgICAgICAgICBwcmludCh2YWx1ZTIpCisgICAgICAgICAgICAgICAgYXNzZXJ0IHZhbHVlMSA9PSB2YWx1ZTIsIChuYXRpdmUxLCBuYXRpdmUyKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiTkFUSVZFMToiKQorICAgICAgICAgICAgICAgICAgICBwcHJpbnQucHByaW50KG5hdGl2ZTEpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJOQVRJVkUyOiIpCisgICAgICAgICAgICAgICAgICAgIHBwcmludC5wcHJpbnQobmF0aXZlMikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIk9VVFBVVDoiKQorICAgICAgICAgICAgICAgICAgICBwcmludChvdXRwdXQpCisKK3Rlc3RfcmVwcmVzZW50ZXJfdHlwZXMudW5pdHRlc3QgPSBbJy5jb2RlJ10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdGVzdF9hcHBsaWFuY2UKKyAgICB0ZXN0X2FwcGxpYW5jZS5ydW4oZ2xvYmFscygpKQorCmRpZmYgLS1naXQgYS90ZXN0cy9saWIvdGVzdF9yZXNvbHZlci5weSBiL3Rlc3RzL2xpYi90ZXN0X3Jlc29sdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OTM5NDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvdGVzdF9yZXNvbHZlci5weQpAQCAtMCwwICsxLDk4IEBACisKK2ltcG9ydCB5YW1sCitpbXBvcnQgcHByaW50CisKK2RlZiB0ZXN0X2ltcGxpY2l0X3Jlc29sdmVyKGRhdGFfZmlsZW5hbWUsIGRldGVjdF9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgY29ycmVjdF90YWcgPSBOb25lCisgICAgbm9kZSA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihkZXRlY3RfZmlsZW5hbWUsICdyJykgYXMgZmlsZToKKyAgICAgICAgICAgIGNvcnJlY3RfdGFnID0gZmlsZS5yZWFkKCkuc3RyaXAoKQorICAgICAgICB3aXRoIG9wZW4oZGF0YV9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIG5vZGUgPSB5YW1sLmNvbXBvc2UoZmlsZSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uobm9kZSwgeWFtbC5TZXF1ZW5jZU5vZGUpLCBub2RlCisgICAgICAgIGZvciBzY2FsYXIgaW4gbm9kZS52YWx1ZToKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNjYWxhciwgeWFtbC5TY2FsYXJOb2RlKSwgc2NhbGFyCisgICAgICAgICAgICBhc3NlcnQgc2NhbGFyLnRhZyA9PSBjb3JyZWN0X3RhZywgKHNjYWxhci50YWcsIGNvcnJlY3RfdGFnKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiQ09SUkVDVCBUQUc6IiwgY29ycmVjdF90YWcpCisgICAgICAgICAgICBpZiBoYXNhdHRyKG5vZGUsICd2YWx1ZScpOgorICAgICAgICAgICAgICAgIHByaW50KCJDSElMRFJFTjoiKQorICAgICAgICAgICAgICAgIHBwcmludC5wcHJpbnQobm9kZS52YWx1ZSkKKwordGVzdF9pbXBsaWNpdF9yZXNvbHZlci51bml0dGVzdCA9IFsnLmRhdGEnLCAnLmRldGVjdCddCisKK2RlZiBfbWFrZV9wYXRoX2xvYWRlcl9hbmRfZHVtcGVyKCk6CisgICAgZ2xvYmFsIE15TG9hZGVyLCBNeUR1bXBlcgorCisgICAgY2xhc3MgTXlMb2FkZXIoeWFtbC5Mb2FkZXIpOgorICAgICAgICBwYXNzCisgICAgY2xhc3MgTXlEdW1wZXIoeWFtbC5EdW1wZXIpOgorICAgICAgICBwYXNzCisKKyAgICB5YW1sLmFkZF9wYXRoX3Jlc29sdmVyKCchcm9vdCcsIFtdLAorICAgICAgICAgICAgTG9hZGVyPU15TG9hZGVyLCBEdW1wZXI9TXlEdW1wZXIpCisgICAgeWFtbC5hZGRfcGF0aF9yZXNvbHZlcignIXJvb3Qvc2NhbGFyJywgW10sIHN0ciwKKyAgICAgICAgICAgIExvYWRlcj1NeUxvYWRlciwgRHVtcGVyPU15RHVtcGVyKQorICAgIHlhbWwuYWRkX3BhdGhfcmVzb2x2ZXIoJyFyb290L2tleTExL2tleTEyLyonLCBbJ2tleTExJywgJ2tleTEyJ10sCisgICAgICAgICAgICBMb2FkZXI9TXlMb2FkZXIsIER1bXBlcj1NeUR1bXBlcikKKyAgICB5YW1sLmFkZF9wYXRoX3Jlc29sdmVyKCchcm9vdC9rZXkyMS8xLyonLCBbJ2tleTIxJywgMV0sCisgICAgICAgICAgICBMb2FkZXI9TXlMb2FkZXIsIER1bXBlcj1NeUR1bXBlcikKKyAgICB5YW1sLmFkZF9wYXRoX3Jlc29sdmVyKCchcm9vdC9rZXkzMS8qLyova2V5MTQvbWFwJywgWydrZXkzMScsIE5vbmUsIE5vbmUsICdrZXkxNCddLCBkaWN0LAorICAgICAgICAgICAgTG9hZGVyPU15TG9hZGVyLCBEdW1wZXI9TXlEdW1wZXIpCisKKyAgICByZXR1cm4gTXlMb2FkZXIsIE15RHVtcGVyCisKK2RlZiBfY29udmVydF9ub2RlKG5vZGUpOgorICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgeWFtbC5TY2FsYXJOb2RlKToKKyAgICAgICAgcmV0dXJuIChub2RlLnRhZywgbm9kZS52YWx1ZSkKKyAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgeWFtbC5TZXF1ZW5jZU5vZGUpOgorICAgICAgICB2YWx1ZSA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIG5vZGUudmFsdWU6CisgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoX2NvbnZlcnRfbm9kZShpdGVtKSkKKyAgICAgICAgcmV0dXJuIChub2RlLnRhZywgdmFsdWUpCisgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIHlhbWwuTWFwcGluZ05vZGUpOgorICAgICAgICB2YWx1ZSA9IFtdCisgICAgICAgIGZvciBrZXksIGl0ZW0gaW4gbm9kZS52YWx1ZToKKyAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgoX2NvbnZlcnRfbm9kZShrZXkpLCBfY29udmVydF9ub2RlKGl0ZW0pKSkKKyAgICAgICAgcmV0dXJuIChub2RlLnRhZywgdmFsdWUpCisKK2RlZiB0ZXN0X3BhdGhfcmVzb2x2ZXJfbG9hZGVyKGRhdGFfZmlsZW5hbWUsIHBhdGhfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIF9tYWtlX3BhdGhfbG9hZGVyX2FuZF9kdW1wZXIoKQorICAgIHdpdGggb3BlbihkYXRhX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBub2RlczEgPSBsaXN0KHlhbWwuY29tcG9zZV9hbGwoZmlsZS5yZWFkKCksIExvYWRlcj1NeUxvYWRlcikpCisgICAgd2l0aCBvcGVuKHBhdGhfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIG5vZGVzMiA9IGxpc3QoeWFtbC5jb21wb3NlX2FsbChmaWxlLnJlYWQoKSkpCisgICAgdHJ5OgorICAgICAgICBmb3Igbm9kZTEsIG5vZGUyIGluIHppcChub2RlczEsIG5vZGVzMik6CisgICAgICAgICAgICBkYXRhMSA9IF9jb252ZXJ0X25vZGUobm9kZTEpCisgICAgICAgICAgICBkYXRhMiA9IF9jb252ZXJ0X25vZGUobm9kZTIpCisgICAgICAgICAgICBhc3NlcnQgZGF0YTEgPT0gZGF0YTIsIChkYXRhMSwgZGF0YTIpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KHlhbWwuc2VyaWFsaXplX2FsbChub2RlczEpKQorCit0ZXN0X3BhdGhfcmVzb2x2ZXJfbG9hZGVyLnVuaXR0ZXN0ID0gWycuZGF0YScsICcucGF0aCddCisKK2RlZiB0ZXN0X3BhdGhfcmVzb2x2ZXJfZHVtcGVyKGRhdGFfZmlsZW5hbWUsIHBhdGhfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIF9tYWtlX3BhdGhfbG9hZGVyX2FuZF9kdW1wZXIoKQorICAgIGZvciBmaWxlbmFtZSBpbiBbZGF0YV9maWxlbmFtZSwgcGF0aF9maWxlbmFtZV06CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIG91dHB1dCA9IHlhbWwuc2VyaWFsaXplX2FsbCh5YW1sLmNvbXBvc2VfYWxsKGZpbGUpLCBEdW1wZXI9TXlEdW1wZXIpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludChvdXRwdXQpCisgICAgICAgIG5vZGVzMSA9IHlhbWwuY29tcG9zZV9hbGwob3V0cHV0KQorICAgICAgICB3aXRoIG9wZW4oZGF0YV9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIG5vZGVzMiA9IHlhbWwuY29tcG9zZV9hbGwoZmlsZSkKKyAgICAgICAgICAgIGZvciBub2RlMSwgbm9kZTIgaW4gemlwKG5vZGVzMSwgbm9kZXMyKToKKyAgICAgICAgICAgICAgICBkYXRhMSA9IF9jb252ZXJ0X25vZGUobm9kZTEpCisgICAgICAgICAgICAgICAgZGF0YTIgPSBfY29udmVydF9ub2RlKG5vZGUyKQorICAgICAgICAgICAgICAgIGFzc2VydCBkYXRhMSA9PSBkYXRhMiwgKGRhdGExLCBkYXRhMikKKwordGVzdF9wYXRoX3Jlc29sdmVyX2R1bXBlci51bml0dGVzdCA9IFsnLmRhdGEnLCAnLnBhdGgnXQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB0ZXN0X2FwcGxpYW5jZQorICAgIHRlc3RfYXBwbGlhbmNlLnJ1bihnbG9iYWxzKCkpCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYi90ZXN0X3NjaGVtYS5weSBiL3Rlc3RzL2xpYi90ZXN0X3NjaGVtYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzM3MGVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGliL3Rlc3Rfc2NoZW1hLnB5CkBAIC0wLDAgKzEsMTUyIEBACitpbXBvcnQgeWFtbAoraW1wb3J0IHN5cworaW1wb3J0IHBwcmludAoraW1wb3J0IG1hdGgKKworZGVmIGNoZWNrX2Jvb2wodmFsdWUsIGV4cGVjdGVkKToKKyAgICBpZiBleHBlY3RlZCA9PSAnZmFsc2UoKScgYW5kIHZhbHVlIGlzIEZhbHNlOgorICAgICAgICByZXR1cm4gMQorICAgIGlmIGV4cGVjdGVkID09ICd0cnVlKCknIGFuZCB2YWx1ZSBpcyBUcnVlOgorICAgICAgICByZXR1cm4gMQorICAgIHByaW50KHZhbHVlKQorICAgIHByaW50KGV4cGVjdGVkKQorICAgIHJldHVybiAwCisKK2RlZiBjaGVja19pbnQodmFsdWUsIGV4cGVjdGVkKToKKyAgICBpZiAoaW50KGV4cGVjdGVkKSA9PSB2YWx1ZSk6CisgICAgICAgIHJldHVybiAxCisgICAgcHJpbnQodmFsdWUpCisgICAgcHJpbnQoZXhwZWN0ZWQpCisgICAgcmV0dXJuIDAKKworZGVmIGNoZWNrX2Zsb2F0KHZhbHVlLCBleHBlY3RlZCk6CisgICAgaWYgZXhwZWN0ZWQgPT0gJ2luZigpJzoKKyAgICAgICAgaWYgdmFsdWUgPT0gbWF0aC5pbmY6CisgICAgICAgICAgICByZXR1cm4gMQorICAgIGVsaWYgZXhwZWN0ZWQgPT0gJ2luZi1uZWcoKSc6CisgICAgICAgIGlmIHZhbHVlID09IC1tYXRoLmluZjoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZWxpZiBleHBlY3RlZCA9PSAnbmFuKCknOgorICAgICAgICBpZiBtYXRoLmlzbmFuKHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZWxpZiAoZmxvYXQoZXhwZWN0ZWQpID09IHZhbHVlKToKKyAgICAgICAgcmV0dXJuIDEKKyAgICBlbHNlOgorICAgICAgICBwcmludCh2YWx1ZSkKKyAgICAgICAgcHJpbnQoZXhwZWN0ZWQpCisgICAgICAgIHJldHVybiAwCisKK2RlZiBjaGVja19zdHIodmFsdWUsIGV4cGVjdGVkKToKKyAgICBpZiB2YWx1ZSA9PSBleHBlY3RlZDoKKyAgICAgICAgcmV0dXJuIDEKKyAgICBwcmludCh2YWx1ZSkKKyAgICBwcmludChleHBlY3RlZCkKKyAgICByZXR1cm4gMAorCisKK2RlZiBfZmFpbChpbnB1dCwgdGVzdCk6CisgICAgcHJpbnQoIklucHV0OiA+PiIgKyBpbnB1dCArICI8PCIpCisgICAgcHJpbnQodGVzdCkKKworIyBUaGUgdGVzdHMvZGF0YS95YW1sMTEuc2NoZW1hIGZpbGUgaXMgY29waWVkIGZyb20KKyMgaHR0cHM6Ly9naXRodWIuY29tL3BlcmxwdW5rL3lhbWwtdGVzdC1zY2hlbWEvYmxvYi9tYXN0ZXIvZGF0YS9zY2hlbWEteWFtbDExLnlhbWwKK2RlZiB0ZXN0X2ltcGxpY2l0X3Jlc29sdmVyKGRhdGFfZmlsZW5hbWUsIHNraXBfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHR5cGVzID0geworICAgICAgICAnc3RyJzogICBbc3RyLCAgIGNoZWNrX3N0cl0sCisgICAgICAgICdpbnQnOiAgIFtpbnQsICAgY2hlY2tfaW50XSwKKyAgICAgICAgJ2Zsb2F0JzogW2Zsb2F0LCBjaGVja19mbG9hdF0sCisgICAgICAgICdpbmYnOiAgIFtmbG9hdCwgY2hlY2tfZmxvYXRdLAorICAgICAgICAnbmFuJzogICBbZmxvYXQsIGNoZWNrX2Zsb2F0XSwKKyAgICAgICAgJ2Jvb2wnOiAgW2Jvb2wsICBjaGVja19ib29sXSwKKyAgICB9CisgICAgd2l0aCBvcGVuKHNraXBfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIHNraXBkYXRhID0geWFtbC5sb2FkKGZpbGUsIExvYWRlcj15YW1sLlNhZmVMb2FkZXIpCisgICAgc2tpcF9sb2FkID0gc2tpcGRhdGFbJ2xvYWQnXQorICAgIHNraXBfZHVtcCA9IHNraXBkYXRhWydkdW1wJ10KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludChza2lwX2xvYWQpCisgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIHRlc3RzID0geWFtbC5sb2FkKGZpbGUsIExvYWRlcj15YW1sLlNhZmVMb2FkZXIpCisKKyAgICBpID0gMAorICAgIGZhaWwgPSAwCisgICAgZm9yIGksIChpbnB1dCwgdGVzdCkgaW4gZW51bWVyYXRlKHNvcnRlZCh0ZXN0cy5pdGVtcygpKSk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0gJyArIHN0cihpKSkKKworICAgICAgICAjIFNraXAga25vd24gbG9hZGVyIGJ1Z3MKKyAgICAgICAgaWYgaW5wdXQgaW4gc2tpcF9sb2FkOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBleHBfdHlwZSA9IHRlc3RbMF0KKyAgICAgICAgZGF0YSAgICAgPSB0ZXN0WzFdCisgICAgICAgIGV4cF9kdW1wID0gdGVzdFsyXQorCisgICAgICAgICMgVGVzdCBsb2FkaW5nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlZCA9IHlhbWwuc2FmZV9sb2FkKGlucHV0KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwcmludCgiRXJyb3I6Iiwgc3lzLmV4Y19pbmZvKClbMF0sICcoJywgc3lzLmV4Y19pbmZvKClbMV0sICcpJykKKyAgICAgICAgICAgIGZhaWwrPTEKKyAgICAgICAgICAgIF9mYWlsKGlucHV0LCB0ZXN0KQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoaW5wdXQpCisgICAgICAgICAgICBwcmludCh0ZXN0KQorICAgICAgICAgICAgcHJpbnQobG9hZGVkKQorICAgICAgICAgICAgcHJpbnQodHlwZShsb2FkZWQpKQorCisgICAgICAgIGlmIGV4cF90eXBlID09ICdudWxsJzoKKyAgICAgICAgICAgIGlmIGxvYWRlZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCs9MQorICAgICAgICAgICAgICAgIF9mYWlsKGlucHV0LCB0ZXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdCA9IHR5cGVzW2V4cF90eXBlXVswXQorICAgICAgICAgICAgY29kZSA9IHR5cGVzW2V4cF90eXBlXVsxXQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsb2FkZWQsIHQpOgorICAgICAgICAgICAgICAgIGlmIGNvZGUobG9hZGVkLCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZhaWwrPTEKKyAgICAgICAgICAgICAgICAgICAgX2ZhaWwoaW5wdXQsIHRlc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWwrPTEKKyAgICAgICAgICAgICAgICBfZmFpbChpbnB1dCwgdGVzdCkKKworICAgICAgICAjIFNraXAga25vd24gZHVtcGVyIGJ1Z3MKKyAgICAgICAgaWYgaW5wdXQgaW4gc2tpcF9kdW1wOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBkdW1wID0geWFtbC5zYWZlX2R1bXAobG9hZGVkLCBleHBsaWNpdF9lbmQ9RmFsc2UpCisgICAgICAgICMgc3RyaXAgdHJhaWxpbmcgbmV3bGluZXMgYW5kIGZvb3RlcnMKKyAgICAgICAgaWYgZHVtcC5lbmRzd2l0aCgnXG4uLi5cbicpOgorICAgICAgICAgICAgZHVtcCA9IGR1bXBbOi01XQorICAgICAgICBpZiBkdW1wLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgZHVtcCA9IGR1bXBbOi0xXQorICAgICAgICBpZiBkdW1wID09IGV4cF9kdW1wOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkNvbXBhcmU6ID4+IiArIGR1bXAgKyAiPDwgPj4iICsgZXhwX2R1bXAgKyAiPDwiKQorICAgICAgICAgICAgZmFpbCs9MQorICAgICAgICAgICAgX2ZhaWwoaW5wdXQsIHRlc3QpCisKKyMgICAgICAgIGlmIGkgPj0gODA6CisjICAgICAgICAgICAgYnJlYWsKKworICAgIGlmIGZhaWwgPiAwOgorICAgICAgICBwcmludCgiRmFpbGVkICIgKyBzdHIoZmFpbCkgKyAiIC8gIiArIHN0cihpKSArICIgdGVzdHMiKQorICAgICAgICBhc3NlcnQoRmFsc2UpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIlBhc3NlZCAiICsgc3RyKGkpICsgIiB0ZXN0cyIpCisgICAgcHJpbnQoIlNraXBwZWQgIiArIHN0cihsZW4oc2tpcF9sb2FkKSkgKyAiIGxvYWQgdGVzdHMiKQorICAgIHByaW50KCJTa2lwcGVkICIgKyBzdHIobGVuKHNraXBfZHVtcCkpICsgIiBkdW1wIHRlc3RzIikKKwordGVzdF9pbXBsaWNpdF9yZXNvbHZlci51bml0dGVzdCA9IFsnLnNjaGVtYScsICcuc2NoZW1hLXNraXAnXQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB0ZXN0X2FwcGxpYW5jZQorICAgIHRlc3RfYXBwbGlhbmNlLnJ1bihnbG9iYWxzKCkpCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYi90ZXN0X3NvcnRfa2V5cy5weSBiL3Rlc3RzL2xpYi90ZXN0X3NvcnRfa2V5cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWRlOGU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGliL3Rlc3Rfc29ydF9rZXlzLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2ltcG9ydCB5YW1sCitpbXBvcnQgcHByaW50CitpbXBvcnQgc3lzCisKK2RlZiB0ZXN0X3NvcnRfa2V5cyhpbnB1dF9maWxlbmFtZSwgc29ydGVkX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICB3aXRoIG9wZW4oaW5wdXRfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGlucHV0ID0gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgd2l0aCBvcGVuKHNvcnRlZF9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgc29ydGVkID0gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgZGF0YSA9IHlhbWwubG9hZChpbnB1dCwgTG9hZGVyPXlhbWwuRnVsbExvYWRlcikKKyAgICBkdW1wX3NvcnRlZCA9IHlhbWwuZHVtcChkYXRhLCBkZWZhdWx0X2Zsb3dfc3R5bGU9RmFsc2UsIHNvcnRfa2V5cz1UcnVlKQorICAgIGR1bXBfdW5zb3J0ZWQgPSB5YW1sLmR1bXAoZGF0YSwgZGVmYXVsdF9mbG93X3N0eWxlPUZhbHNlLCBzb3J0X2tleXM9RmFsc2UpCisgICAgZHVtcF91bnNvcnRlZF9zYWZlID0geWFtbC5kdW1wKGRhdGEsIGRlZmF1bHRfZmxvd19zdHlsZT1GYWxzZSwgc29ydF9rZXlzPUZhbHNlLCBEdW1wZXI9eWFtbC5TYWZlRHVtcGVyKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50KCJJTlBVVDoiKQorICAgICAgICBwcmludChpbnB1dCkKKyAgICAgICAgcHJpbnQoIkRBVEE6IikKKyAgICAgICAgcHJpbnQoZGF0YSkKKworICAgIGFzc2VydCBkdW1wX3NvcnRlZCA9PSBzb3J0ZWQKKworICAgIGlmIHN5cy52ZXJzaW9uX2luZm8+PSgzLDcpOgorICAgICAgICBhc3NlcnQgZHVtcF91bnNvcnRlZCA9PSBpbnB1dAorICAgICAgICBhc3NlcnQgZHVtcF91bnNvcnRlZF9zYWZlID09IGlucHV0CisKK3Rlc3Rfc29ydF9rZXlzLnVuaXR0ZXN0ID0gWycuc29ydCcsICcuc29ydGVkJ10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdGVzdF9hcHBsaWFuY2UKKyAgICB0ZXN0X2FwcGxpYW5jZS5ydW4oZ2xvYmFscygpKQorCmRpZmYgLS1naXQgYS90ZXN0cy9saWIvdGVzdF9zdHJ1Y3R1cmUucHkgYi90ZXN0cy9saWIvdGVzdF9zdHJ1Y3R1cmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkNGMzZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYi90ZXN0X3N0cnVjdHVyZS5weQpAQCAtMCwwICsxLDE5OSBAQAorCitpbXBvcnQgeWFtbCwgY2Fub25pY2FsCitpbXBvcnQgcHByaW50CisKK2RlZiBfY29udmVydF9zdHJ1Y3R1cmUobG9hZGVyKToKKyAgICBpZiBsb2FkZXIuY2hlY2tfZXZlbnQoeWFtbC5TY2FsYXJFdmVudCk6CisgICAgICAgIGV2ZW50ID0gbG9hZGVyLmdldF9ldmVudCgpCisgICAgICAgIGlmIGV2ZW50LnRhZyBvciBldmVudC5hbmNob3Igb3IgZXZlbnQudmFsdWU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBlbGlmIGxvYWRlci5jaGVja19ldmVudCh5YW1sLlNlcXVlbmNlU3RhcnRFdmVudCk6CisgICAgICAgIGxvYWRlci5nZXRfZXZlbnQoKQorICAgICAgICBzZXF1ZW5jZSA9IFtdCisgICAgICAgIHdoaWxlIG5vdCBsb2FkZXIuY2hlY2tfZXZlbnQoeWFtbC5TZXF1ZW5jZUVuZEV2ZW50KToKKyAgICAgICAgICAgIHNlcXVlbmNlLmFwcGVuZChfY29udmVydF9zdHJ1Y3R1cmUobG9hZGVyKSkKKyAgICAgICAgbG9hZGVyLmdldF9ldmVudCgpCisgICAgICAgIHJldHVybiBzZXF1ZW5jZQorICAgIGVsaWYgbG9hZGVyLmNoZWNrX2V2ZW50KHlhbWwuTWFwcGluZ1N0YXJ0RXZlbnQpOgorICAgICAgICBsb2FkZXIuZ2V0X2V2ZW50KCkKKyAgICAgICAgbWFwcGluZyA9IFtdCisgICAgICAgIHdoaWxlIG5vdCBsb2FkZXIuY2hlY2tfZXZlbnQoeWFtbC5NYXBwaW5nRW5kRXZlbnQpOgorICAgICAgICAgICAga2V5ID0gX2NvbnZlcnRfc3RydWN0dXJlKGxvYWRlcikKKyAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfc3RydWN0dXJlKGxvYWRlcikKKyAgICAgICAgICAgIG1hcHBpbmcuYXBwZW5kKChrZXksIHZhbHVlKSkKKyAgICAgICAgbG9hZGVyLmdldF9ldmVudCgpCisgICAgICAgIHJldHVybiBtYXBwaW5nCisgICAgZWxpZiBsb2FkZXIuY2hlY2tfZXZlbnQoeWFtbC5BbGlhc0V2ZW50KToKKyAgICAgICAgbG9hZGVyLmdldF9ldmVudCgpCisgICAgICAgIHJldHVybiAnKicKKyAgICBlbHNlOgorICAgICAgICBsb2FkZXIuZ2V0X2V2ZW50KCkKKyAgICAgICAgcmV0dXJuICc/JworCitkZWYgdGVzdF9zdHJ1Y3R1cmUoZGF0YV9maWxlbmFtZSwgc3RydWN0dXJlX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICBub2RlczEgPSBbXQorICAgIHdpdGggb3BlbihzdHJ1Y3R1cmVfZmlsZW5hbWUsICdyJykgYXMgZmlsZToKKyAgICAgICAgbm9kZXMyID0gZXZhbChmaWxlLnJlYWQoKSkKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihkYXRhX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgbG9hZGVyID0geWFtbC5Mb2FkZXIoZmlsZSkKKyAgICAgICAgICAgIHdoaWxlIGxvYWRlci5jaGVja19ldmVudCgpOgorICAgICAgICAgICAgICAgIGlmIGxvYWRlci5jaGVja19ldmVudCgKKyAgICAgICAgICAgICAgICAgICAgeWFtbC5TdHJlYW1TdGFydEV2ZW50LCB5YW1sLlN0cmVhbUVuZEV2ZW50LAorICAgICAgICAgICAgICAgICAgICB5YW1sLkRvY3VtZW50U3RhcnRFdmVudCwgeWFtbC5Eb2N1bWVudEVuZEV2ZW50CisgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmdldF9ldmVudCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbm9kZXMxLmFwcGVuZChfY29udmVydF9zdHJ1Y3R1cmUobG9hZGVyKSkKKyAgICAgICAgaWYgbGVuKG5vZGVzMSkgPT0gMToKKyAgICAgICAgICAgIG5vZGVzMSA9IG5vZGVzMVswXQorICAgICAgICBhc3NlcnQgbm9kZXMxID09IG5vZGVzMiwgKG5vZGVzMSwgbm9kZXMyKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiTk9ERVMxOiIpCisgICAgICAgICAgICBwcHJpbnQucHByaW50KG5vZGVzMSkKKyAgICAgICAgICAgIHByaW50KCJOT0RFUzI6IikKKyAgICAgICAgICAgIHBwcmludC5wcHJpbnQobm9kZXMyKQorCit0ZXN0X3N0cnVjdHVyZS51bml0dGVzdCA9IFsnLmRhdGEnLCAnLnN0cnVjdHVyZSddCisKK2RlZiBfY29tcGFyZV9ldmVudHMoZXZlbnRzMSwgZXZlbnRzMiwgZnVsbD1GYWxzZSk6CisgICAgYXNzZXJ0IGxlbihldmVudHMxKSA9PSBsZW4oZXZlbnRzMiksIChsZW4oZXZlbnRzMSksIGxlbihldmVudHMyKSkKKyAgICBmb3IgZXZlbnQxLCBldmVudDIgaW4gemlwKGV2ZW50czEsIGV2ZW50czIpOgorICAgICAgICBhc3NlcnQgZXZlbnQxLl9fY2xhc3NfXyA9PSBldmVudDIuX19jbGFzc19fLCAoZXZlbnQxLCBldmVudDIpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQxLCB5YW1sLkFsaWFzRXZlbnQpIGFuZCBmdWxsOgorICAgICAgICAgICAgYXNzZXJ0IGV2ZW50MS5hbmNob3IgPT0gZXZlbnQyLmFuY2hvciwgKGV2ZW50MSwgZXZlbnQyKQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50MSwgKHlhbWwuU2NhbGFyRXZlbnQsIHlhbWwuQ29sbGVjdGlvblN0YXJ0RXZlbnQpKToKKyAgICAgICAgICAgIGlmIChldmVudDEudGFnIG5vdCBpbiBbTm9uZSwgJyEnXSBhbmQgZXZlbnQyLnRhZyBub3QgaW4gW05vbmUsICchJ10pIG9yIGZ1bGw6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGV2ZW50MS50YWcgPT0gZXZlbnQyLnRhZywgKGV2ZW50MSwgZXZlbnQyKQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50MSwgeWFtbC5TY2FsYXJFdmVudCk6CisgICAgICAgICAgICBhc3NlcnQgZXZlbnQxLnZhbHVlID09IGV2ZW50Mi52YWx1ZSwgKGV2ZW50MSwgZXZlbnQyKQorCitkZWYgdGVzdF9wYXJzZXIoZGF0YV9maWxlbmFtZSwgY2Fub25pY2FsX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICBldmVudHMxID0gTm9uZQorICAgIGV2ZW50czIgPSBOb25lCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZGF0YV9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIGV2ZW50czEgPSBsaXN0KHlhbWwucGFyc2UoZmlsZSkpCisgICAgICAgIHdpdGggb3BlbihjYW5vbmljYWxfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBldmVudHMyID0gbGlzdCh5YW1sLmNhbm9uaWNhbF9wYXJzZShmaWxlKSkKKyAgICAgICAgX2NvbXBhcmVfZXZlbnRzKGV2ZW50czEsIGV2ZW50czIpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJFVkVOVFMxOiIpCisgICAgICAgICAgICBwcHJpbnQucHByaW50KGV2ZW50czEpCisgICAgICAgICAgICBwcmludCgiRVZFTlRTMjoiKQorICAgICAgICAgICAgcHByaW50LnBwcmludChldmVudHMyKQorCit0ZXN0X3BhcnNlci51bml0dGVzdCA9IFsnLmRhdGEnLCAnLmNhbm9uaWNhbCddCisKK2RlZiB0ZXN0X3BhcnNlcl9vbl9jYW5vbmljYWwoY2Fub25pY2FsX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICBldmVudHMxID0gTm9uZQorICAgIGV2ZW50czIgPSBOb25lCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oY2Fub25pY2FsX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgZXZlbnRzMSA9IGxpc3QoeWFtbC5wYXJzZShmaWxlKSkKKyAgICAgICAgd2l0aCBvcGVuKGNhbm9uaWNhbF9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIGV2ZW50czIgPSBsaXN0KHlhbWwuY2Fub25pY2FsX3BhcnNlKGZpbGUpKQorICAgICAgICBfY29tcGFyZV9ldmVudHMoZXZlbnRzMSwgZXZlbnRzMiwgZnVsbD1UcnVlKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiRVZFTlRTMToiKQorICAgICAgICAgICAgcHByaW50LnBwcmludChldmVudHMxKQorICAgICAgICAgICAgcHJpbnQoIkVWRU5UUzI6IikKKyAgICAgICAgICAgIHBwcmludC5wcHJpbnQoZXZlbnRzMikKKwordGVzdF9wYXJzZXJfb25fY2Fub25pY2FsLnVuaXR0ZXN0ID0gWycuY2Fub25pY2FsJ10KKworZGVmIF9jb21wYXJlX25vZGVzKG5vZGUxLCBub2RlMik6CisgICAgYXNzZXJ0IG5vZGUxLl9fY2xhc3NfXyA9PSBub2RlMi5fX2NsYXNzX18sIChub2RlMSwgbm9kZTIpCisgICAgYXNzZXJ0IG5vZGUxLnRhZyA9PSBub2RlMi50YWcsIChub2RlMSwgbm9kZTIpCisgICAgaWYgaXNpbnN0YW5jZShub2RlMSwgeWFtbC5TY2FsYXJOb2RlKToKKyAgICAgICAgYXNzZXJ0IG5vZGUxLnZhbHVlID09IG5vZGUyLnZhbHVlLCAobm9kZTEsIG5vZGUyKQorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBsZW4obm9kZTEudmFsdWUpID09IGxlbihub2RlMi52YWx1ZSksIChub2RlMSwgbm9kZTIpCisgICAgICAgIGZvciBpdGVtMSwgaXRlbTIgaW4gemlwKG5vZGUxLnZhbHVlLCBub2RlMi52YWx1ZSk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdGVtMSwgdHVwbGUpOgorICAgICAgICAgICAgICAgIGl0ZW0xID0gKGl0ZW0xLCkKKyAgICAgICAgICAgICAgICBpdGVtMiA9IChpdGVtMiwpCisgICAgICAgICAgICBmb3Igc3Vibm9kZTEsIHN1Ym5vZGUyIGluIHppcChpdGVtMSwgaXRlbTIpOgorICAgICAgICAgICAgICAgIF9jb21wYXJlX25vZGVzKHN1Ym5vZGUxLCBzdWJub2RlMikKKworZGVmIHRlc3RfY29tcG9zZXIoZGF0YV9maWxlbmFtZSwgY2Fub25pY2FsX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICBub2RlczEgPSBOb25lCisgICAgbm9kZXMyID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBub2RlczEgPSBsaXN0KHlhbWwuY29tcG9zZV9hbGwoZmlsZSkpCisgICAgICAgIHdpdGggb3BlbihjYW5vbmljYWxfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBub2RlczIgPSBsaXN0KHlhbWwuY2Fub25pY2FsX2NvbXBvc2VfYWxsKGZpbGUpKQorICAgICAgICBhc3NlcnQgbGVuKG5vZGVzMSkgPT0gbGVuKG5vZGVzMiksIChsZW4obm9kZXMxKSwgbGVuKG5vZGVzMikpCisgICAgICAgIGZvciBub2RlMSwgbm9kZTIgaW4gemlwKG5vZGVzMSwgbm9kZXMyKToKKyAgICAgICAgICAgIF9jb21wYXJlX25vZGVzKG5vZGUxLCBub2RlMikKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIk5PREVTMToiKQorICAgICAgICAgICAgcHByaW50LnBwcmludChub2RlczEpCisgICAgICAgICAgICBwcmludCgiTk9ERVMyOiIpCisgICAgICAgICAgICBwcHJpbnQucHByaW50KG5vZGVzMikKKwordGVzdF9jb21wb3Nlci51bml0dGVzdCA9IFsnLmRhdGEnLCAnLmNhbm9uaWNhbCddCisKK2RlZiBfbWFrZV9sb2FkZXIoKToKKyAgICBnbG9iYWwgTXlMb2FkZXIKKworICAgIGNsYXNzIE15TG9hZGVyKHlhbWwuTG9hZGVyKToKKyAgICAgICAgZGVmIGNvbnN0cnVjdF9zZXF1ZW5jZShzZWxmLCBub2RlKToKKyAgICAgICAgICAgIHJldHVybiB0dXBsZSh5YW1sLkxvYWRlci5jb25zdHJ1Y3Rfc2VxdWVuY2Uoc2VsZiwgbm9kZSkpCisgICAgICAgIGRlZiBjb25zdHJ1Y3RfbWFwcGluZyhzZWxmLCBub2RlKToKKyAgICAgICAgICAgIHBhaXJzID0gc2VsZi5jb25zdHJ1Y3RfcGFpcnMobm9kZSkKKyAgICAgICAgICAgIHBhaXJzLnNvcnQoa2V5PShsYW1iZGEgaTogc3RyKGkpKSkKKyAgICAgICAgICAgIHJldHVybiBwYWlycworICAgICAgICBkZWYgY29uc3RydWN0X3VuZGVmaW5lZChzZWxmLCBub2RlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbnN0cnVjdF9zY2FsYXIobm9kZSkKKworICAgIE15TG9hZGVyLmFkZF9jb25zdHJ1Y3RvcigndGFnOnlhbWwub3JnLDIwMDI6bWFwJywgTXlMb2FkZXIuY29uc3RydWN0X21hcHBpbmcpCisgICAgTXlMb2FkZXIuYWRkX2NvbnN0cnVjdG9yKE5vbmUsIE15TG9hZGVyLmNvbnN0cnVjdF91bmRlZmluZWQpCisKK2RlZiBfbWFrZV9jYW5vbmljYWxfbG9hZGVyKCk6CisgICAgZ2xvYmFsIE15Q2Fub25pY2FsTG9hZGVyCisKKyAgICBjbGFzcyBNeUNhbm9uaWNhbExvYWRlcih5YW1sLkNhbm9uaWNhbExvYWRlcik6CisgICAgICAgIGRlZiBjb25zdHJ1Y3Rfc2VxdWVuY2Uoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoeWFtbC5DYW5vbmljYWxMb2FkZXIuY29uc3RydWN0X3NlcXVlbmNlKHNlbGYsIG5vZGUpKQorICAgICAgICBkZWYgY29uc3RydWN0X21hcHBpbmcoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICBwYWlycyA9IHNlbGYuY29uc3RydWN0X3BhaXJzKG5vZGUpCisgICAgICAgICAgICBwYWlycy5zb3J0KGtleT0obGFtYmRhIGk6IHN0cihpKSkpCisgICAgICAgICAgICByZXR1cm4gcGFpcnMKKyAgICAgICAgZGVmIGNvbnN0cnVjdF91bmRlZmluZWQoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb25zdHJ1Y3Rfc2NhbGFyKG5vZGUpCisKKyAgICBNeUNhbm9uaWNhbExvYWRlci5hZGRfY29uc3RydWN0b3IoJ3RhZzp5YW1sLm9yZywyMDAyOm1hcCcsIE15Q2Fub25pY2FsTG9hZGVyLmNvbnN0cnVjdF9tYXBwaW5nKQorICAgIE15Q2Fub25pY2FsTG9hZGVyLmFkZF9jb25zdHJ1Y3RvcihOb25lLCBNeUNhbm9uaWNhbExvYWRlci5jb25zdHJ1Y3RfdW5kZWZpbmVkKQorCitkZWYgdGVzdF9jb25zdHJ1Y3RvcihkYXRhX2ZpbGVuYW1lLCBjYW5vbmljYWxfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIF9tYWtlX2xvYWRlcigpCisgICAgX21ha2VfY2Fub25pY2FsX2xvYWRlcigpCisgICAgbmF0aXZlMSA9IE5vbmUKKyAgICBuYXRpdmUyID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBuYXRpdmUxID0gbGlzdCh5YW1sLmxvYWRfYWxsKGZpbGUsIExvYWRlcj1NeUxvYWRlcikpCisgICAgICAgIHdpdGggb3BlbihjYW5vbmljYWxfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBuYXRpdmUyID0gbGlzdCh5YW1sLmxvYWRfYWxsKGZpbGUsIExvYWRlcj1NeUNhbm9uaWNhbExvYWRlcikpCisgICAgICAgIGFzc2VydCBuYXRpdmUxID09IG5hdGl2ZTIsIChuYXRpdmUxLCBuYXRpdmUyKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiTkFUSVZFMToiKQorICAgICAgICAgICAgcHByaW50LnBwcmludChuYXRpdmUxKQorICAgICAgICAgICAgcHJpbnQoIk5BVElWRTI6IikKKyAgICAgICAgICAgIHBwcmludC5wcHJpbnQobmF0aXZlMikKKwordGVzdF9jb25zdHJ1Y3Rvci51bml0dGVzdCA9IFsnLmRhdGEnLCAnLmNhbm9uaWNhbCddCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKGdsb2JhbHMoKSkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfdG9rZW5zLnB5IGIvdGVzdHMvbGliL3Rlc3RfdG9rZW5zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Y2U3YWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWIvdGVzdF90b2tlbnMucHkKQEAgLTAsMCArMSw4MCBAQAorCitpbXBvcnQgeWFtbAoraW1wb3J0IHBwcmludAorCisjIFRva2VucyBtbmVtb25pYzoKKyMgZGlyZWN0aXZlOiAgICAgICAgICAgICUKKyMgZG9jdW1lbnRfc3RhcnQ6ICAgICAgIC0tLQorIyBkb2N1bWVudF9lbmQ6ICAgICAgICAgLi4uCisjIGFsaWFzOiAgICAgICAgICAgICAgICAqCisjIGFuY2hvcjogICAgICAgICAgICAgICAmCisjIHRhZzogICAgICAgICAgICAgICAgICAhCisjIHNjYWxhciAgICAgICAgICAgICAgICBfCisjIGJsb2NrX3NlcXVlbmNlX3N0YXJ0OiBbWworIyBibG9ja19tYXBwaW5nX3N0YXJ0OiAge3sKKyMgYmxvY2tfZW5kOiAgICAgICAgICAgIF19CisjIGZsb3dfc2VxdWVuY2Vfc3RhcnQ6ICBbCisjIGZsb3dfc2VxdWVuY2VfZW5kOiAgICBdCisjIGZsb3dfbWFwcGluZ19zdGFydDogICB7CisjIGZsb3dfbWFwcGluZ19lbmQ6ICAgICB9CisjIGVudHJ5OiAgICAgICAgICAgICAgICAsCisjIGtleTogICAgICAgICAgICAgICAgICA/CisjIHZhbHVlOiAgICAgICAgICAgICAgICA6CisKK19yZXBsYWNlcyA9IHsKKyAgICB5YW1sLkRpcmVjdGl2ZVRva2VuOiAnJScsCisgICAgeWFtbC5Eb2N1bWVudFN0YXJ0VG9rZW46ICctLS0nLAorICAgIHlhbWwuRG9jdW1lbnRFbmRUb2tlbjogJy4uLicsCisgICAgeWFtbC5BbGlhc1Rva2VuOiAnKicsCisgICAgeWFtbC5BbmNob3JUb2tlbjogJyYnLAorICAgIHlhbWwuVGFnVG9rZW46ICchJywKKyAgICB5YW1sLlNjYWxhclRva2VuOiAnXycsCisgICAgeWFtbC5CbG9ja1NlcXVlbmNlU3RhcnRUb2tlbjogJ1tbJywKKyAgICB5YW1sLkJsb2NrTWFwcGluZ1N0YXJ0VG9rZW46ICd7eycsCisgICAgeWFtbC5CbG9ja0VuZFRva2VuOiAnXX0nLAorICAgIHlhbWwuRmxvd1NlcXVlbmNlU3RhcnRUb2tlbjogJ1snLAorICAgIHlhbWwuRmxvd1NlcXVlbmNlRW5kVG9rZW46ICddJywKKyAgICB5YW1sLkZsb3dNYXBwaW5nU3RhcnRUb2tlbjogJ3snLAorICAgIHlhbWwuRmxvd01hcHBpbmdFbmRUb2tlbjogJ30nLAorICAgIHlhbWwuQmxvY2tFbnRyeVRva2VuOiAnLCcsCisgICAgeWFtbC5GbG93RW50cnlUb2tlbjogJywnLAorICAgIHlhbWwuS2V5VG9rZW46ICc/JywKKyAgICB5YW1sLlZhbHVlVG9rZW46ICc6JywKK30KKworZGVmIHRlc3RfdG9rZW5zKGRhdGFfZmlsZW5hbWUsIHRva2Vuc19maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgdG9rZW5zMSA9IFtdCisgICAgd2l0aCBvcGVuKHRva2Vuc19maWxlbmFtZSwgJ3InKSBhcyBmaWxlOgorICAgICAgICB0b2tlbnMyID0gZmlsZS5yZWFkKCkuc3BsaXQoKQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBmb3IgdG9rZW4gaW4geWFtbC5zY2FuKGZpbGUpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRva2VuLCAoeWFtbC5TdHJlYW1TdGFydFRva2VuLCB5YW1sLlN0cmVhbUVuZFRva2VuKSk6CisgICAgICAgICAgICAgICAgICAgIHRva2VuczEuYXBwZW5kKF9yZXBsYWNlc1t0b2tlbi5fX2NsYXNzX19dKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiVE9LRU5TMToiLCAnICcuam9pbih0b2tlbnMxKSkKKyAgICAgICAgICAgIHByaW50KCJUT0tFTlMyOiIsICcgJy5qb2luKHRva2VuczIpKQorICAgIGFzc2VydCBsZW4odG9rZW5zMSkgPT0gbGVuKHRva2VuczIpLCAodG9rZW5zMSwgdG9rZW5zMikKKyAgICBmb3IgdG9rZW4xLCB0b2tlbjIgaW4gemlwKHRva2VuczEsIHRva2VuczIpOgorICAgICAgICBhc3NlcnQgdG9rZW4xID09IHRva2VuMiwgKHRva2VuMSwgdG9rZW4yKQorCit0ZXN0X3Rva2Vucy51bml0dGVzdCA9IFsnLmRhdGEnLCAnLnRva2VucyddCisKK2RlZiB0ZXN0X3NjYW5uZXIoZGF0YV9maWxlbmFtZSwgY2Fub25pY2FsX2ZpbGVuYW1lLCB2ZXJib3NlPUZhbHNlKToKKyAgICBmb3IgZmlsZW5hbWUgaW4gW2RhdGFfZmlsZW5hbWUsIGNhbm9uaWNhbF9maWxlbmFtZV06CisgICAgICAgIHRva2VucyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICBmb3IgdG9rZW4gaW4geWFtbC5zY2FuKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICB0b2tlbnMuYXBwZW5kKHRva2VuLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHByaW50LnBwcmludCh0b2tlbnMpCisKK3Rlc3Rfc2Nhbm5lci51bml0dGVzdCA9IFsnLmRhdGEnLCAnLmNhbm9uaWNhbCddCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKGdsb2JhbHMoKSkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfeWFtbC5weSBiL3Rlc3RzL2xpYi90ZXN0X3lhbWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVjMTBhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYi90ZXN0X3lhbWwucHkKQEAgLTAsMCArMSwyMyBAQAorCitmcm9tIHRlc3RfZHVtcF9sb2FkIGltcG9ydCAqCitmcm9tIHRlc3RfbWFyayBpbXBvcnQgKgorZnJvbSB0ZXN0X3JlYWRlciBpbXBvcnQgKgorZnJvbSB0ZXN0X2Nhbm9uaWNhbCBpbXBvcnQgKgorZnJvbSB0ZXN0X3Rva2VucyBpbXBvcnQgKgorZnJvbSB0ZXN0X3N0cnVjdHVyZSBpbXBvcnQgKgorZnJvbSB0ZXN0X2Vycm9ycyBpbXBvcnQgKgorZnJvbSB0ZXN0X3Jlc29sdmVyIGltcG9ydCAqCitmcm9tIHRlc3RfY29uc3RydWN0b3IgaW1wb3J0ICoKK2Zyb20gdGVzdF9lbWl0dGVyIGltcG9ydCAqCitmcm9tIHRlc3RfcmVwcmVzZW50ZXIgaW1wb3J0ICoKK2Zyb20gdGVzdF9yZWN1cnNpdmUgaW1wb3J0ICoKK2Zyb20gdGVzdF9pbnB1dF9vdXRwdXQgaW1wb3J0ICoKK2Zyb20gdGVzdF9zb3J0X2tleXMgaW1wb3J0ICoKK2Zyb20gdGVzdF9tdWx0aV9jb25zdHJ1Y3RvciBpbXBvcnQgKgorCitmcm9tIHRlc3Rfc2NoZW1hIGltcG9ydCAqCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKGdsb2JhbHMoKSkKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliL3Rlc3RfeWFtbF9leHQucHkgYi90ZXN0cy9saWIvdGVzdF95YW1sX2V4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWM0YmI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGliL3Rlc3RfeWFtbF9leHQucHkKQEAgLTAsMCArMSwyOTQgQEAKKworaW1wb3J0IHlhbWwuX3lhbWwsIHlhbWwKK2ltcG9ydCB0eXBlcywgcHByaW50LCB0ZW1wZmlsZSwgc3lzLCBvcworCit5YW1sLlB5QmFzZUxvYWRlciA9IHlhbWwuQmFzZUxvYWRlcgoreWFtbC5QeVNhZmVMb2FkZXIgPSB5YW1sLlNhZmVMb2FkZXIKK3lhbWwuUHlMb2FkZXIgPSB5YW1sLkxvYWRlcgoreWFtbC5QeUJhc2VEdW1wZXIgPSB5YW1sLkJhc2VEdW1wZXIKK3lhbWwuUHlTYWZlRHVtcGVyID0geWFtbC5TYWZlRHVtcGVyCit5YW1sLlB5RHVtcGVyID0geWFtbC5EdW1wZXIKKworb2xkX3NjYW4gPSB5YW1sLnNjYW4KK2RlZiBuZXdfc2NhbihzdHJlYW0sIExvYWRlcj15YW1sLkNMb2FkZXIpOgorICAgIHJldHVybiBvbGRfc2NhbihzdHJlYW0sIExvYWRlcikKKworb2xkX3BhcnNlID0geWFtbC5wYXJzZQorZGVmIG5ld19wYXJzZShzdHJlYW0sIExvYWRlcj15YW1sLkNMb2FkZXIpOgorICAgIHJldHVybiBvbGRfcGFyc2Uoc3RyZWFtLCBMb2FkZXIpCisKK29sZF9jb21wb3NlID0geWFtbC5jb21wb3NlCitkZWYgbmV3X2NvbXBvc2Uoc3RyZWFtLCBMb2FkZXI9eWFtbC5DTG9hZGVyKToKKyAgICByZXR1cm4gb2xkX2NvbXBvc2Uoc3RyZWFtLCBMb2FkZXIpCisKK29sZF9jb21wb3NlX2FsbCA9IHlhbWwuY29tcG9zZV9hbGwKK2RlZiBuZXdfY29tcG9zZV9hbGwoc3RyZWFtLCBMb2FkZXI9eWFtbC5DTG9hZGVyKToKKyAgICByZXR1cm4gb2xkX2NvbXBvc2VfYWxsKHN0cmVhbSwgTG9hZGVyKQorCitvbGRfbG9hZCA9IHlhbWwubG9hZAorZGVmIG5ld19sb2FkKHN0cmVhbSwgTG9hZGVyPXlhbWwuQ0xvYWRlcik6CisgICAgcmV0dXJuIG9sZF9sb2FkKHN0cmVhbSwgTG9hZGVyKQorCitvbGRfbG9hZF9hbGwgPSB5YW1sLmxvYWRfYWxsCitkZWYgbmV3X2xvYWRfYWxsKHN0cmVhbSwgTG9hZGVyPXlhbWwuQ0xvYWRlcik6CisgICAgcmV0dXJuIG9sZF9sb2FkX2FsbChzdHJlYW0sIExvYWRlcikKKworb2xkX3NhZmVfbG9hZCA9IHlhbWwuc2FmZV9sb2FkCitkZWYgbmV3X3NhZmVfbG9hZChzdHJlYW0pOgorICAgIHJldHVybiBvbGRfbG9hZChzdHJlYW0sIHlhbWwuQ1NhZmVMb2FkZXIpCisKK29sZF9zYWZlX2xvYWRfYWxsID0geWFtbC5zYWZlX2xvYWRfYWxsCitkZWYgbmV3X3NhZmVfbG9hZF9hbGwoc3RyZWFtKToKKyAgICByZXR1cm4gb2xkX2xvYWRfYWxsKHN0cmVhbSwgeWFtbC5DU2FmZUxvYWRlcikKKworb2xkX2VtaXQgPSB5YW1sLmVtaXQKK2RlZiBuZXdfZW1pdChldmVudHMsIHN0cmVhbT1Ob25lLCBEdW1wZXI9eWFtbC5DRHVtcGVyLCAqKmt3ZHMpOgorICAgIHJldHVybiBvbGRfZW1pdChldmVudHMsIHN0cmVhbSwgRHVtcGVyLCAqKmt3ZHMpCisKK29sZF9zZXJpYWxpemUgPSB5YW1sLnNlcmlhbGl6ZQorZGVmIG5ld19zZXJpYWxpemUobm9kZSwgc3RyZWFtLCBEdW1wZXI9eWFtbC5DRHVtcGVyLCAqKmt3ZHMpOgorICAgIHJldHVybiBvbGRfc2VyaWFsaXplKG5vZGUsIHN0cmVhbSwgRHVtcGVyLCAqKmt3ZHMpCisKK29sZF9zZXJpYWxpemVfYWxsID0geWFtbC5zZXJpYWxpemVfYWxsCitkZWYgbmV3X3NlcmlhbGl6ZV9hbGwobm9kZXMsIHN0cmVhbT1Ob25lLCBEdW1wZXI9eWFtbC5DRHVtcGVyLCAqKmt3ZHMpOgorICAgIHJldHVybiBvbGRfc2VyaWFsaXplX2FsbChub2Rlcywgc3RyZWFtLCBEdW1wZXIsICoqa3dkcykKKworb2xkX2R1bXAgPSB5YW1sLmR1bXAKK2RlZiBuZXdfZHVtcChkYXRhLCBzdHJlYW09Tm9uZSwgRHVtcGVyPXlhbWwuQ0R1bXBlciwgKiprd2RzKToKKyAgICByZXR1cm4gb2xkX2R1bXAoZGF0YSwgc3RyZWFtLCBEdW1wZXIsICoqa3dkcykKKworb2xkX2R1bXBfYWxsID0geWFtbC5kdW1wX2FsbAorZGVmIG5ld19kdW1wX2FsbChkb2N1bWVudHMsIHN0cmVhbT1Ob25lLCBEdW1wZXI9eWFtbC5DRHVtcGVyLCAqKmt3ZHMpOgorICAgIHJldHVybiBvbGRfZHVtcF9hbGwoZG9jdW1lbnRzLCBzdHJlYW0sIER1bXBlciwgKiprd2RzKQorCitvbGRfc2FmZV9kdW1wID0geWFtbC5zYWZlX2R1bXAKK2RlZiBuZXdfc2FmZV9kdW1wKGRhdGEsIHN0cmVhbT1Ob25lLCAqKmt3ZHMpOgorICAgIHJldHVybiBvbGRfZHVtcChkYXRhLCBzdHJlYW0sIHlhbWwuQ1NhZmVEdW1wZXIsICoqa3dkcykKKworb2xkX3NhZmVfZHVtcF9hbGwgPSB5YW1sLnNhZmVfZHVtcF9hbGwKK2RlZiBuZXdfc2FmZV9kdW1wX2FsbChkb2N1bWVudHMsIHN0cmVhbT1Ob25lLCAqKmt3ZHMpOgorICAgIHJldHVybiBvbGRfZHVtcF9hbGwoZG9jdW1lbnRzLCBzdHJlYW0sIHlhbWwuQ1NhZmVEdW1wZXIsICoqa3dkcykKKworZGVmIF9zZXRfdXAoKToKKyAgICB5YW1sLkJhc2VMb2FkZXIgPSB5YW1sLkNCYXNlTG9hZGVyCisgICAgeWFtbC5TYWZlTG9hZGVyID0geWFtbC5DU2FmZUxvYWRlcgorICAgIHlhbWwuTG9hZGVyID0geWFtbC5DTG9hZGVyCisgICAgeWFtbC5CYXNlRHVtcGVyID0geWFtbC5DQmFzZUR1bXBlcgorICAgIHlhbWwuU2FmZUR1bXBlciA9IHlhbWwuQ1NhZmVEdW1wZXIKKyAgICB5YW1sLkR1bXBlciA9IHlhbWwuQ0R1bXBlcgorICAgIHlhbWwuc2NhbiA9IG5ld19zY2FuCisgICAgeWFtbC5wYXJzZSA9IG5ld19wYXJzZQorICAgIHlhbWwuY29tcG9zZSA9IG5ld19jb21wb3NlCisgICAgeWFtbC5jb21wb3NlX2FsbCA9IG5ld19jb21wb3NlX2FsbAorICAgIHlhbWwubG9hZCA9IG5ld19sb2FkCisgICAgeWFtbC5sb2FkX2FsbCA9IG5ld19sb2FkX2FsbAorICAgIHlhbWwuc2FmZV9sb2FkID0gbmV3X3NhZmVfbG9hZAorICAgIHlhbWwuc2FmZV9sb2FkX2FsbCA9IG5ld19zYWZlX2xvYWRfYWxsCisgICAgeWFtbC5lbWl0ID0gbmV3X2VtaXQKKyAgICB5YW1sLnNlcmlhbGl6ZSA9IG5ld19zZXJpYWxpemUKKyAgICB5YW1sLnNlcmlhbGl6ZV9hbGwgPSBuZXdfc2VyaWFsaXplX2FsbAorICAgIHlhbWwuZHVtcCA9IG5ld19kdW1wCisgICAgeWFtbC5kdW1wX2FsbCA9IG5ld19kdW1wX2FsbAorICAgIHlhbWwuc2FmZV9kdW1wID0gbmV3X3NhZmVfZHVtcAorICAgIHlhbWwuc2FmZV9kdW1wX2FsbCA9IG5ld19zYWZlX2R1bXBfYWxsCisKK2RlZiBfdGVhcl9kb3duKCk6CisgICAgeWFtbC5CYXNlTG9hZGVyID0geWFtbC5QeUJhc2VMb2FkZXIKKyAgICB5YW1sLlNhZmVMb2FkZXIgPSB5YW1sLlB5U2FmZUxvYWRlcgorICAgIHlhbWwuTG9hZGVyID0geWFtbC5QeUxvYWRlcgorICAgIHlhbWwuQmFzZUR1bXBlciA9IHlhbWwuUHlCYXNlRHVtcGVyCisgICAgeWFtbC5TYWZlRHVtcGVyID0geWFtbC5QeVNhZmVEdW1wZXIKKyAgICB5YW1sLkR1bXBlciA9IHlhbWwuUHlEdW1wZXIKKyAgICB5YW1sLnNjYW4gPSBvbGRfc2NhbgorICAgIHlhbWwucGFyc2UgPSBvbGRfcGFyc2UKKyAgICB5YW1sLmNvbXBvc2UgPSBvbGRfY29tcG9zZQorICAgIHlhbWwuY29tcG9zZV9hbGwgPSBvbGRfY29tcG9zZV9hbGwKKyAgICB5YW1sLmxvYWQgPSBvbGRfbG9hZAorICAgIHlhbWwubG9hZF9hbGwgPSBvbGRfbG9hZF9hbGwKKyAgICB5YW1sLnNhZmVfbG9hZCA9IG9sZF9zYWZlX2xvYWQKKyAgICB5YW1sLnNhZmVfbG9hZF9hbGwgPSBvbGRfc2FmZV9sb2FkX2FsbAorICAgIHlhbWwuZW1pdCA9IG9sZF9lbWl0CisgICAgeWFtbC5zZXJpYWxpemUgPSBvbGRfc2VyaWFsaXplCisgICAgeWFtbC5zZXJpYWxpemVfYWxsID0gb2xkX3NlcmlhbGl6ZV9hbGwKKyAgICB5YW1sLmR1bXAgPSBvbGRfZHVtcAorICAgIHlhbWwuZHVtcF9hbGwgPSBvbGRfZHVtcF9hbGwKKyAgICB5YW1sLnNhZmVfZHVtcCA9IG9sZF9zYWZlX2R1bXAKKyAgICB5YW1sLnNhZmVfZHVtcF9hbGwgPSBvbGRfc2FmZV9kdW1wX2FsbAorCitkZWYgdGVzdF9jX3ZlcnNpb24odmVyYm9zZT1GYWxzZSk6CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQoX3lhbWwuZ2V0X3ZlcnNpb24oKSkKKyAgICAgICAgcHJpbnQoX3lhbWwuZ2V0X3ZlcnNpb25fc3RyaW5nKCkpCisgICAgYXNzZXJ0ICgiJXMuJXMuJXMiICUgeWFtbC5feWFtbC5nZXRfdmVyc2lvbigpKSA9PSB5YW1sLl95YW1sLmdldF92ZXJzaW9uX3N0cmluZygpLCAgICBcCisgICAgICAgICAgICAoX3lhbWwuZ2V0X3ZlcnNpb24oKSwgeWFtbC5feWFtbC5nZXRfdmVyc2lvbl9zdHJpbmcoKSkKKworZGVmIHRlc3RfZGVwcmVjYXRlX3lhbWxfbW9kdWxlKCk6CisgICAgaW1wb3J0IF95YW1sCisgICAgYXNzZXJ0IF95YW1sLl9fcGFja2FnZV9fID09ICcnCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoX3lhbWwuZ2V0X3ZlcnNpb24oKSwgc3RyKQorCitkZWYgX2NvbXBhcmVfc2Nhbm5lcnMocHlfZGF0YSwgY19kYXRhLCB2ZXJib3NlKToKKyAgICBweV90b2tlbnMgPSBsaXN0KHlhbWwuc2NhbihweV9kYXRhLCBMb2FkZXI9eWFtbC5QeUxvYWRlcikpCisgICAgY190b2tlbnMgPSBbXQorICAgIHRyeToKKyAgICAgICAgZm9yIHRva2VuIGluIHlhbWwuc2NhbihjX2RhdGEsIExvYWRlcj15YW1sLkNMb2FkZXIpOgorICAgICAgICAgICAgY190b2tlbnMuYXBwZW5kKHRva2VuKQorICAgICAgICBhc3NlcnQgbGVuKHB5X3Rva2VucykgPT0gbGVuKGNfdG9rZW5zKSwgKGxlbihweV90b2tlbnMpLCBsZW4oY190b2tlbnMpKQorICAgICAgICBmb3IgcHlfdG9rZW4sIGNfdG9rZW4gaW4gemlwKHB5X3Rva2VucywgY190b2tlbnMpOgorICAgICAgICAgICAgYXNzZXJ0IHB5X3Rva2VuLl9fY2xhc3NfXyA9PSBjX3Rva2VuLl9fY2xhc3NfXywgKHB5X3Rva2VuLCBjX3Rva2VuKQorICAgICAgICAgICAgaWYgaGFzYXR0cihweV90b2tlbiwgJ3ZhbHVlJyk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHB5X3Rva2VuLnZhbHVlID09IGNfdG9rZW4udmFsdWUsIChweV90b2tlbiwgY190b2tlbikKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocHlfdG9rZW4sIHlhbWwuU3RyZWFtRW5kVG9rZW4pOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBweV9zdGFydCA9IChweV90b2tlbi5zdGFydF9tYXJrLmluZGV4LCBweV90b2tlbi5zdGFydF9tYXJrLmxpbmUsIHB5X3Rva2VuLnN0YXJ0X21hcmsuY29sdW1uKQorICAgICAgICAgICAgcHlfZW5kID0gKHB5X3Rva2VuLmVuZF9tYXJrLmluZGV4LCBweV90b2tlbi5lbmRfbWFyay5saW5lLCBweV90b2tlbi5lbmRfbWFyay5jb2x1bW4pCisgICAgICAgICAgICBjX3N0YXJ0ID0gKGNfdG9rZW4uc3RhcnRfbWFyay5pbmRleCwgY190b2tlbi5zdGFydF9tYXJrLmxpbmUsIGNfdG9rZW4uc3RhcnRfbWFyay5jb2x1bW4pCisgICAgICAgICAgICBjX2VuZCA9IChjX3Rva2VuLmVuZF9tYXJrLmluZGV4LCBjX3Rva2VuLmVuZF9tYXJrLmxpbmUsIGNfdG9rZW4uZW5kX21hcmsuY29sdW1uKQorICAgICAgICAgICAgYXNzZXJ0IHB5X3N0YXJ0ID09IGNfc3RhcnQsIChweV9zdGFydCwgY19zdGFydCkKKyAgICAgICAgICAgIGFzc2VydCBweV9lbmQgPT0gY19lbmQsIChweV9lbmQsIGNfZW5kKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiUFlfVE9LRU5TOiIpCisgICAgICAgICAgICBwcHJpbnQucHByaW50KHB5X3Rva2VucykKKyAgICAgICAgICAgIHByaW50KCJDX1RPS0VOUzoiKQorICAgICAgICAgICAgcHByaW50LnBwcmludChjX3Rva2VucykKKworZGVmIHRlc3RfY19zY2FubmVyKGRhdGFfZmlsZW5hbWUsIGNhbm9uaWNhbF9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSk6CisgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUxLCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUyOgorICAgICAgICBfY29tcGFyZV9zY2FubmVycyhmaWxlMSwgZmlsZTIsIHZlcmJvc2UpCisgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUxLCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUyOgorICAgICAgICBfY29tcGFyZV9zY2FubmVycyhmaWxlMS5yZWFkKCksIGZpbGUyLnJlYWQoKSwgdmVyYm9zZSkKKyAgICB3aXRoIG9wZW4oY2Fub25pY2FsX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlMSwgb3BlbihjYW5vbmljYWxfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUyOgorICAgICAgICBfY29tcGFyZV9zY2FubmVycyhmaWxlMSwgZmlsZTIsIHZlcmJvc2UpCisgICAgd2l0aCBvcGVuKGNhbm9uaWNhbF9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZTEsIG9wZW4oY2Fub25pY2FsX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlMjoKKyAgICAgICAgX2NvbXBhcmVfc2Nhbm5lcnMoZmlsZTEucmVhZCgpLCBmaWxlMi5yZWFkKCksIHZlcmJvc2UpCisKK3Rlc3RfY19zY2FubmVyLnVuaXR0ZXN0ID0gWycuZGF0YScsICcuY2Fub25pY2FsJ10KK3Rlc3RfY19zY2FubmVyLnNraXAgPSBbJy5za2lwLWV4dCddCisKK2RlZiBfY29tcGFyZV9wYXJzZXJzKHB5X2RhdGEsIGNfZGF0YSwgdmVyYm9zZSk6CisgICAgcHlfZXZlbnRzID0gbGlzdCh5YW1sLnBhcnNlKHB5X2RhdGEsIExvYWRlcj15YW1sLlB5TG9hZGVyKSkKKyAgICBjX2V2ZW50cyA9IFtdCisgICAgdHJ5OgorICAgICAgICBmb3IgZXZlbnQgaW4geWFtbC5wYXJzZShjX2RhdGEsIExvYWRlcj15YW1sLkNMb2FkZXIpOgorICAgICAgICAgICAgY19ldmVudHMuYXBwZW5kKGV2ZW50KQorICAgICAgICBhc3NlcnQgbGVuKHB5X2V2ZW50cykgPT0gbGVuKGNfZXZlbnRzKSwgKGxlbihweV9ldmVudHMpLCBsZW4oY19ldmVudHMpKQorICAgICAgICBmb3IgcHlfZXZlbnQsIGNfZXZlbnQgaW4gemlwKHB5X2V2ZW50cywgY19ldmVudHMpOgorICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZSBpbiBbJ19fY2xhc3NfXycsICdhbmNob3InLCAndGFnJywgJ2ltcGxpY2l0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJywgJ2V4cGxpY2l0JywgJ3ZlcnNpb24nLCAndGFncyddOgorICAgICAgICAgICAgICAgIHB5X3ZhbHVlID0gZ2V0YXR0cihweV9ldmVudCwgYXR0cmlidXRlLCBOb25lKQorICAgICAgICAgICAgICAgIGNfdmFsdWUgPSBnZXRhdHRyKGNfZXZlbnQsIGF0dHJpYnV0ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgcHlfdmFsdWUgPT0gY192YWx1ZSwgKHB5X2V2ZW50LCBjX2V2ZW50LCBhdHRyaWJ1dGUpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJQWV9FVkVOVFM6IikKKyAgICAgICAgICAgIHBwcmludC5wcHJpbnQocHlfZXZlbnRzKQorICAgICAgICAgICAgcHJpbnQoIkNfRVZFTlRTOiIpCisgICAgICAgICAgICBwcHJpbnQucHByaW50KGNfZXZlbnRzKQorCitkZWYgdGVzdF9jX3BhcnNlcihkYXRhX2ZpbGVuYW1lLCBjYW5vbmljYWxfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHdpdGggb3BlbihkYXRhX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlMSwgb3BlbihkYXRhX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlMjoKKyAgICAgICAgX2NvbXBhcmVfcGFyc2VycyhmaWxlMSwgZmlsZTIsIHZlcmJvc2UpCisgICAgd2l0aCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUxLCBvcGVuKGRhdGFfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUyOgorICAgICAgICBfY29tcGFyZV9wYXJzZXJzKGZpbGUxLnJlYWQoKSwgZmlsZTIucmVhZCgpLCB2ZXJib3NlKQorICAgIHdpdGggb3BlbihjYW5vbmljYWxfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUxLCBvcGVuKGNhbm9uaWNhbF9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZTI6CisgICAgICAgIF9jb21wYXJlX3BhcnNlcnMoZmlsZTEsIGZpbGUyLCB2ZXJib3NlKQorICAgIHdpdGggb3BlbihjYW5vbmljYWxfZmlsZW5hbWUsICdyYicpIGFzIGZpbGUxLCBvcGVuKGNhbm9uaWNhbF9maWxlbmFtZSwgJ3JiJykgYXMgZmlsZTI6CisgICAgICAgIF9jb21wYXJlX3BhcnNlcnMoZmlsZTEucmVhZCgpLCBmaWxlMi5yZWFkKCksIHZlcmJvc2UpCisKK3Rlc3RfY19wYXJzZXIudW5pdHRlc3QgPSBbJy5kYXRhJywgJy5jYW5vbmljYWwnXQordGVzdF9jX3BhcnNlci5za2lwID0gWycuc2tpcC1leHQnXQorCitkZWYgX2NvbXBhcmVfZW1pdHRlcnMoZGF0YSwgdmVyYm9zZSk6CisgICAgZXZlbnRzID0gbGlzdCh5YW1sLnBhcnNlKGRhdGEsIExvYWRlcj15YW1sLlB5TG9hZGVyKSkKKyAgICBjX2RhdGEgPSB5YW1sLmVtaXQoZXZlbnRzLCBEdW1wZXI9eWFtbC5DRHVtcGVyKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50KGNfZGF0YSkKKyAgICBweV9ldmVudHMgPSBsaXN0KHlhbWwucGFyc2UoY19kYXRhLCBMb2FkZXI9eWFtbC5QeUxvYWRlcikpCisgICAgY19ldmVudHMgPSBsaXN0KHlhbWwucGFyc2UoY19kYXRhLCBMb2FkZXI9eWFtbC5DTG9hZGVyKSkKKyAgICB0cnk6CisgICAgICAgIGFzc2VydCBsZW4oZXZlbnRzKSA9PSBsZW4ocHlfZXZlbnRzKSwgKGxlbihldmVudHMpLCBsZW4ocHlfZXZlbnRzKSkKKyAgICAgICAgYXNzZXJ0IGxlbihldmVudHMpID09IGxlbihjX2V2ZW50cyksIChsZW4oZXZlbnRzKSwgbGVuKGNfZXZlbnRzKSkKKyAgICAgICAgZm9yIGV2ZW50LCBweV9ldmVudCwgY19ldmVudCBpbiB6aXAoZXZlbnRzLCBweV9ldmVudHMsIGNfZXZlbnRzKToKKyAgICAgICAgICAgIGZvciBhdHRyaWJ1dGUgaW4gWydfX2NsYXNzX18nLCAnYW5jaG9yJywgJ3RhZycsICdpbXBsaWNpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZScsICdleHBsaWNpdCcsICd2ZXJzaW9uJywgJ3RhZ3MnXToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoZXZlbnQsIGF0dHJpYnV0ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBweV92YWx1ZSA9IGdldGF0dHIocHlfZXZlbnQsIGF0dHJpYnV0ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBjX3ZhbHVlID0gZ2V0YXR0cihjX2V2ZW50LCBhdHRyaWJ1dGUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgYXR0cmlidXRlID09ICd0YWcnIGFuZCB2YWx1ZSBpbiBbTm9uZSwgJyEnXSBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHlfdmFsdWUgaW4gW05vbmUsICchJ10gYW5kIGNfdmFsdWUgaW4gW05vbmUsICchJ106CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgYXR0cmlidXRlID09ICdleHBsaWNpdCcgYW5kIChweV92YWx1ZSBvciBjX3ZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBhc3NlcnQgdmFsdWUgPT0gcHlfdmFsdWUsIChldmVudCwgcHlfZXZlbnQsIGF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgdmFsdWUgPT0gY192YWx1ZSwgKGV2ZW50LCBjX2V2ZW50LCBhdHRyaWJ1dGUpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJFVkVOVFM6IikKKyAgICAgICAgICAgIHBwcmludC5wcHJpbnQoZXZlbnRzKQorICAgICAgICAgICAgcHJpbnQoIlBZX0VWRU5UUzoiKQorICAgICAgICAgICAgcHByaW50LnBwcmludChweV9ldmVudHMpCisgICAgICAgICAgICBwcmludCgiQ19FVkVOVFM6IikKKyAgICAgICAgICAgIHBwcmludC5wcHJpbnQoY19ldmVudHMpCisKK2RlZiB0ZXN0X2NfZW1pdHRlcihkYXRhX2ZpbGVuYW1lLCBjYW5vbmljYWxfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UpOgorICAgIHdpdGggb3BlbihkYXRhX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBfY29tcGFyZV9lbWl0dGVycyhmaWxlLnJlYWQoKSwgdmVyYm9zZSkKKyAgICB3aXRoIG9wZW4oY2Fub25pY2FsX2ZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgorICAgICAgICBfY29tcGFyZV9lbWl0dGVycyhmaWxlLnJlYWQoKSwgdmVyYm9zZSkKKwordGVzdF9jX2VtaXR0ZXIudW5pdHRlc3QgPSBbJy5kYXRhJywgJy5jYW5vbmljYWwnXQordGVzdF9jX2VtaXR0ZXIuc2tpcCA9IFsnLnNraXAtZXh0J10KKworZGVmIHRlc3RfbGFyZ2VfZmlsZSh2ZXJib3NlPUZhbHNlKToKKyAgICBTSVpFX0xJTkUgPSAyNAorICAgIFNJWkVfSVRFUkFUSU9OID0gMAorICAgIFNJWkVfRklMRSA9IDMxCisgICAgaWYgc3lzLm1heHNpemUgPD0gMioqMzI6CisgICAgICAgIHJldHVybgorICAgIGlmIG9zLmVudmlyb24uZ2V0KCdQWVlBTUxfVEVTVF9HUk9VUCcsICcnKSAhPSAnYWxsJzoKKyAgICAgICAgcmV0dXJuCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkgYXMgdGVtcF9maWxlOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKiooU0laRV9GSUxFLVNJWkVfSVRFUkFUSU9OLVNJWkVfTElORSkgKyAxKToKKyAgICAgICAgICAgIHRlbXBfZmlsZS53cml0ZShieXRlcygoJy0nICsgKCcgJyAqICgyKipTSVpFX0xJTkUtNCkpKyAne31cbicpKigyKipTSVpFX0lURVJBVElPTiksICd1dGYtOCcpKQorICAgICAgICB0ZW1wX2ZpbGUuc2VlaygwKQorICAgICAgICB5YW1sLmxvYWQodGVtcF9maWxlLCBMb2FkZXI9eWFtbC5DTG9hZGVyKQorCit0ZXN0X2xhcmdlX2ZpbGUudW5pdHRlc3QgPSBOb25lCisKK2RlZiB3cmFwX2V4dF9mdW5jdGlvbihmdW5jdGlvbik6CisgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIF9zZXRfdXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdW5jdGlvbigqYXJncywgKiprd2RzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3RlYXJfZG93bigpCisgICAgd3JhcHBlci5fX25hbWVfXyA9ICclc19leHQnICUgZnVuY3Rpb24uX19uYW1lX18KKyAgICB3cmFwcGVyLnVuaXR0ZXN0ID0gZnVuY3Rpb24udW5pdHRlc3QKKyAgICB3cmFwcGVyLnNraXAgPSBnZXRhdHRyKGZ1bmN0aW9uLCAnc2tpcCcsIFtdKStbJy5za2lwLWV4dCddCisgICAgcmV0dXJuIHdyYXBwZXIKKworZGVmIHdyYXBfZXh0KGNvbGxlY3Rpb25zKToKKyAgICBmdW5jdGlvbnMgPSBbXQorICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbGxlY3Rpb25zLCBsaXN0KToKKyAgICAgICAgY29sbGVjdGlvbnMgPSBbY29sbGVjdGlvbnNdCisgICAgZm9yIGNvbGxlY3Rpb24gaW4gY29sbGVjdGlvbnM6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbGxlY3Rpb24sIGRpY3QpOgorICAgICAgICAgICAgY29sbGVjdGlvbiA9IHZhcnMoY29sbGVjdGlvbikKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoY29sbGVjdGlvbik6CisgICAgICAgICAgICB2YWx1ZSA9IGNvbGxlY3Rpb25ba2V5XQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdHlwZXMuRnVuY3Rpb25UeXBlKSBhbmQgaGFzYXR0cih2YWx1ZSwgJ3VuaXR0ZXN0Jyk6CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLmFwcGVuZCh3cmFwX2V4dF9mdW5jdGlvbih2YWx1ZSkpCisgICAgZm9yIGZ1bmN0aW9uIGluIGZ1bmN0aW9uczoKKyAgICAgICAgYXNzZXJ0IGZ1bmN0aW9uLl9fbmFtZV9fIG5vdCBpbiBnbG9iYWxzKCkKKyAgICAgICAgZ2xvYmFscygpW2Z1bmN0aW9uLl9fbmFtZV9fXSA9IGZ1bmN0aW9uCisKK2ltcG9ydCB0ZXN0X3Rva2VucywgdGVzdF9zdHJ1Y3R1cmUsIHRlc3RfZXJyb3JzLCB0ZXN0X3Jlc29sdmVyLCB0ZXN0X2NvbnN0cnVjdG9yLCAgIFwKKyAgICAgICAgdGVzdF9lbWl0dGVyLCB0ZXN0X3JlcHJlc2VudGVyLCB0ZXN0X3JlY3Vyc2l2ZSwgdGVzdF9pbnB1dF9vdXRwdXQKK3dyYXBfZXh0KFt0ZXN0X3Rva2VucywgdGVzdF9zdHJ1Y3R1cmUsIHRlc3RfZXJyb3JzLCB0ZXN0X3Jlc29sdmVyLCB0ZXN0X2NvbnN0cnVjdG9yLAorICAgICAgICB0ZXN0X2VtaXR0ZXIsIHRlc3RfcmVwcmVzZW50ZXIsIHRlc3RfcmVjdXJzaXZlLCB0ZXN0X2lucHV0X291dHB1dF0pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHRlc3RfYXBwbGlhbmNlCisgICAgdGVzdF9hcHBsaWFuY2UucnVuKGdsb2JhbHMoKSkKKwpkaWZmIC0tZ2l0IGEvdG94LmluaSBiL3RveC5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczNmE2YwotLS0gL2Rldi9udWxsCisrKyBiL3RveC5pbmkKQEAgLTAsMCArMSw5IEBACitbdG94XQorZW52bGlzdCA9IHB5cHkzLHB5MzYscHkzNyxweTM4LHB5MzkscHkzMTAKKworW3Rlc3RlbnZdCitkZXBzID0KKyAgICBDeXRob24KK2NvbW1hbmRzID0KKyAgICBweXRob24gc2V0dXAucHkgdGVzdAorcGFzc2VudiA9IFBZWUFNTF9URVNUX0dST1VQCmRpZmYgLS1naXQgYS95YW1sL19faW5pdF9fLnB4ZCBiL3lhbWwvX19pbml0X18ucHhkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95YW1sL19faW5pdF9fLnB4ZApkaWZmIC0tZ2l0IGEveWFtbC9feWFtbC5oIGIveWFtbC9feWFtbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTg0YzQKLS0tIC9kZXYvbnVsbAorKysgYi95YW1sL195YW1sLmgKQEAgLTAsMCArMSwxMyBAQAorCisjaW5jbHVkZSA8eWFtbC5oPgorCisjZGVmaW5lIFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhzKSBQeVVuaWNvZGVfRnJvbVN0cmluZygoY29uc3QgY2hhciAqKSh2b2lkICopKHMpKQorI2RlZmluZSBQeUJ5dGVzX0FTX1lhbWxfU1RSSU5HKHMpICgoeWFtbF9jaGFyX3QgKilQeUJ5dGVzX0FTX1NUUklORyhzKSkKKworI2lmZGVmIF9NU0NfVkVSCS8qIE1TIFZpc3VhbCBDKysgNi4wICovCisjaWYgX01TQ19WRVIgPT0gMTIwMAorCisjZGVmaW5lIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZyh6KQlQeUludF9Gcm9tTG9uZyhpKQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveWFtbC9feWFtbC5weGQgYi95YW1sL195YW1sLnB4ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTMyNDRkCi0tLSAvZGV2L251bGwKKysrIGIveWFtbC9feWFtbC5weGQKQEAgLTAsMCArMSwyNTggQEAKKworY2RlZiBleHRlcm4gZnJvbSAiX3lhbWwuaCI6CisKKyAgICB2b2lkIG1hbGxvYyhpbnQgbCkKKyAgICB2b2lkIG1lbWNweSh2b2lkICpkLCB2b2lkICpzLCBpbnQgbCkKKyAgICBpbnQgc3RybGVuKGNoYXIgKnMpCisgICAgaW50IFB5U3RyaW5nX0NoZWNrRXhhY3Qob2JqZWN0IG8pCisgICAgaW50IFB5VW5pY29kZV9DaGVja0V4YWN0KG9iamVjdCBvKQorICAgIGNoYXIgKlB5U3RyaW5nX0FTX1NUUklORyhvYmplY3QgbykKKyAgICBvYmplY3QgUHlVbmljb2RlX0Zyb21TdHJpbmcoY2hhciAqdSkKKyAgICBvYmplY3QgUHlVbmljb2RlX0RlY29kZVVURjgoY2hhciAqdSwgaW50IHMsIGNoYXIgKmUpCisgICAgb2JqZWN0IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcob2JqZWN0IG8pCisgICAgaW50IFBZX01BSk9SX1ZFUlNJT04KKworICAgIGN0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeWFtbF9jaGFyX3QKKworICAgIG9iamVjdCBQeVVuaWNvZGVfRnJvbVlhbWxTdHJpbmcodm9pZCAqdSkKKyAgICB5YW1sX2NoYXJfdCAqUHlCeXRlc19BU19ZYW1sX1NUUklORyhvYmplY3QgbykKKyAgICBjb25zdCBjaGFyICpQeUJ5dGVzX0FTX1NUUklORyhvYmplY3QgbykKKyAgICBpbnQgUHlCeXRlc19DaGVja0V4YWN0KG9iamVjdCBvKQorICAgIGludCBQeUJ5dGVzX0dFVF9TSVpFKG9iamVjdCBvKQorICAgIG9iamVjdCBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGNoYXIgKnYsIGludCBsKQorCisgICAgY3R5cGVkZWYgZW51bToKKyAgICAgICAgU0laRU9GX1ZPSURfUAorICAgIGN0eXBlZGVmIGVudW0geWFtbF9lbmNvZGluZ190OgorICAgICAgICBZQU1MX0FOWV9FTkNPRElORworICAgICAgICBZQU1MX1VURjhfRU5DT0RJTkcKKyAgICAgICAgWUFNTF9VVEYxNkxFX0VOQ09ESU5HCisgICAgICAgIFlBTUxfVVRGMTZCRV9FTkNPRElORworICAgIGN0eXBlZGVmIGVudW0geWFtbF9icmVha190OgorICAgICAgICBZQU1MX0FOWV9CUkVBSworICAgICAgICBZQU1MX0NSX0JSRUFLCisgICAgICAgIFlBTUxfTE5fQlJFQUsKKyAgICAgICAgWUFNTF9DUkxOX0JSRUFLCisgICAgY3R5cGVkZWYgZW51bSB5YW1sX2Vycm9yX3R5cGVfdDoKKyAgICAgICAgWUFNTF9OT19FUlJPUgorICAgICAgICBZQU1MX01FTU9SWV9FUlJPUgorICAgICAgICBZQU1MX1JFQURFUl9FUlJPUgorICAgICAgICBZQU1MX1NDQU5ORVJfRVJST1IKKyAgICAgICAgWUFNTF9QQVJTRVJfRVJST1IKKyAgICAgICAgWUFNTF9XUklURVJfRVJST1IKKyAgICAgICAgWUFNTF9FTUlUVEVSX0VSUk9SCisgICAgY3R5cGVkZWYgZW51bSB5YW1sX3NjYWxhcl9zdHlsZV90OgorICAgICAgICBZQU1MX0FOWV9TQ0FMQVJfU1RZTEUKKyAgICAgICAgWUFNTF9QTEFJTl9TQ0FMQVJfU1RZTEUKKyAgICAgICAgWUFNTF9TSU5HTEVfUVVPVEVEX1NDQUxBUl9TVFlMRQorICAgICAgICBZQU1MX0RPVUJMRV9RVU9URURfU0NBTEFSX1NUWUxFCisgICAgICAgIFlBTUxfTElURVJBTF9TQ0FMQVJfU1RZTEUKKyAgICAgICAgWUFNTF9GT0xERURfU0NBTEFSX1NUWUxFCisgICAgY3R5cGVkZWYgZW51bSB5YW1sX3NlcXVlbmNlX3N0eWxlX3Q6CisgICAgICAgIFlBTUxfQU5ZX1NFUVVFTkNFX1NUWUxFCisgICAgICAgIFlBTUxfQkxPQ0tfU0VRVUVOQ0VfU1RZTEUKKyAgICAgICAgWUFNTF9GTE9XX1NFUVVFTkNFX1NUWUxFCisgICAgY3R5cGVkZWYgZW51bSB5YW1sX21hcHBpbmdfc3R5bGVfdDoKKyAgICAgICAgWUFNTF9BTllfTUFQUElOR19TVFlMRQorICAgICAgICBZQU1MX0JMT0NLX01BUFBJTkdfU1RZTEUKKyAgICAgICAgWUFNTF9GTE9XX01BUFBJTkdfU1RZTEUKKyAgICBjdHlwZWRlZiBlbnVtIHlhbWxfdG9rZW5fdHlwZV90OgorICAgICAgICBZQU1MX05PX1RPS0VOCisgICAgICAgIFlBTUxfU1RSRUFNX1NUQVJUX1RPS0VOCisgICAgICAgIFlBTUxfU1RSRUFNX0VORF9UT0tFTgorICAgICAgICBZQU1MX1ZFUlNJT05fRElSRUNUSVZFX1RPS0VOCisgICAgICAgIFlBTUxfVEFHX0RJUkVDVElWRV9UT0tFTgorICAgICAgICBZQU1MX0RPQ1VNRU5UX1NUQVJUX1RPS0VOCisgICAgICAgIFlBTUxfRE9DVU1FTlRfRU5EX1RPS0VOCisgICAgICAgIFlBTUxfQkxPQ0tfU0VRVUVOQ0VfU1RBUlRfVE9LRU4KKyAgICAgICAgWUFNTF9CTE9DS19NQVBQSU5HX1NUQVJUX1RPS0VOCisgICAgICAgIFlBTUxfQkxPQ0tfRU5EX1RPS0VOCisgICAgICAgIFlBTUxfRkxPV19TRVFVRU5DRV9TVEFSVF9UT0tFTgorICAgICAgICBZQU1MX0ZMT1dfU0VRVUVOQ0VfRU5EX1RPS0VOCisgICAgICAgIFlBTUxfRkxPV19NQVBQSU5HX1NUQVJUX1RPS0VOCisgICAgICAgIFlBTUxfRkxPV19NQVBQSU5HX0VORF9UT0tFTgorICAgICAgICBZQU1MX0JMT0NLX0VOVFJZX1RPS0VOCisgICAgICAgIFlBTUxfRkxPV19FTlRSWV9UT0tFTgorICAgICAgICBZQU1MX0tFWV9UT0tFTgorICAgICAgICBZQU1MX1ZBTFVFX1RPS0VOCisgICAgICAgIFlBTUxfQUxJQVNfVE9LRU4KKyAgICAgICAgWUFNTF9BTkNIT1JfVE9LRU4KKyAgICAgICAgWUFNTF9UQUdfVE9LRU4KKyAgICAgICAgWUFNTF9TQ0FMQVJfVE9LRU4KKyAgICBjdHlwZWRlZiBlbnVtIHlhbWxfZXZlbnRfdHlwZV90OgorICAgICAgICBZQU1MX05PX0VWRU5UCisgICAgICAgIFlBTUxfU1RSRUFNX1NUQVJUX0VWRU5UCisgICAgICAgIFlBTUxfU1RSRUFNX0VORF9FVkVOVAorICAgICAgICBZQU1MX0RPQ1VNRU5UX1NUQVJUX0VWRU5UCisgICAgICAgIFlBTUxfRE9DVU1FTlRfRU5EX0VWRU5UCisgICAgICAgIFlBTUxfQUxJQVNfRVZFTlQKKyAgICAgICAgWUFNTF9TQ0FMQVJfRVZFTlQKKyAgICAgICAgWUFNTF9TRVFVRU5DRV9TVEFSVF9FVkVOVAorICAgICAgICBZQU1MX1NFUVVFTkNFX0VORF9FVkVOVAorICAgICAgICBZQU1MX01BUFBJTkdfU1RBUlRfRVZFTlQKKyAgICAgICAgWUFNTF9NQVBQSU5HX0VORF9FVkVOVAorCisgICAgY3R5cGVkZWYgaW50IHlhbWxfcmVhZF9oYW5kbGVyX3Qodm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCAqc2l6ZV9yZWFkKSBleGNlcHQgMAorCisgICAgY3R5cGVkZWYgaW50IHlhbWxfd3JpdGVfaGFuZGxlcl90KHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgIHNpemVfdCBzaXplKSBleGNlcHQgMAorCisgICAgY3R5cGVkZWYgc3RydWN0IHlhbWxfbWFya190OgorICAgICAgICBzaXplX3QgaW5kZXgKKyAgICAgICAgc2l6ZV90IGxpbmUKKyAgICAgICAgc2l6ZV90IGNvbHVtbgorICAgIGN0eXBlZGVmIHN0cnVjdCB5YW1sX3ZlcnNpb25fZGlyZWN0aXZlX3Q6CisgICAgICAgIGludCBtYWpvcgorICAgICAgICBpbnQgbWlub3IKKyAgICBjdHlwZWRlZiBzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlX3Q6CisgICAgICAgIHlhbWxfY2hhcl90ICpoYW5kbGUKKyAgICAgICAgeWFtbF9jaGFyX3QgKnByZWZpeAorCisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX3Rva2VuX3N0cmVhbV9zdGFydF9kYXRhX3Q6CisgICAgICAgIHlhbWxfZW5jb2RpbmdfdCBlbmNvZGluZworICAgIGN0eXBlZGVmIHN0cnVjdCBfeWFtbF90b2tlbl9hbGlhc19kYXRhX3Q6CisgICAgICAgIGNoYXIgKnZhbHVlCisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX3Rva2VuX2FuY2hvcl9kYXRhX3Q6CisgICAgICAgIGNoYXIgKnZhbHVlCisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX3Rva2VuX3RhZ19kYXRhX3Q6CisgICAgICAgIGNoYXIgKmhhbmRsZQorICAgICAgICBjaGFyICpzdWZmaXgKKyAgICBjdHlwZWRlZiBzdHJ1Y3QgX3lhbWxfdG9rZW5fc2NhbGFyX2RhdGFfdDoKKyAgICAgICAgY2hhciAqdmFsdWUKKyAgICAgICAgc2l6ZV90IGxlbmd0aAorICAgICAgICB5YW1sX3NjYWxhcl9zdHlsZV90IHN0eWxlCisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX3Rva2VuX3ZlcnNpb25fZGlyZWN0aXZlX2RhdGFfdDoKKyAgICAgICAgaW50IG1ham9yCisgICAgICAgIGludCBtaW5vcgorICAgIGN0eXBlZGVmIHN0cnVjdCBfeWFtbF90b2tlbl90YWdfZGlyZWN0aXZlX2RhdGFfdDoKKyAgICAgICAgY2hhciAqaGFuZGxlCisgICAgICAgIGNoYXIgKnByZWZpeAorICAgIGN0eXBlZGVmIHVuaW9uIF95YW1sX3Rva2VuX2RhdGFfdDoKKyAgICAgICAgX3lhbWxfdG9rZW5fc3RyZWFtX3N0YXJ0X2RhdGFfdCBzdHJlYW1fc3RhcnQKKyAgICAgICAgX3lhbWxfdG9rZW5fYWxpYXNfZGF0YV90IGFsaWFzCisgICAgICAgIF95YW1sX3Rva2VuX2FuY2hvcl9kYXRhX3QgYW5jaG9yCisgICAgICAgIF95YW1sX3Rva2VuX3RhZ19kYXRhX3QgdGFnCisgICAgICAgIF95YW1sX3Rva2VuX3NjYWxhcl9kYXRhX3Qgc2NhbGFyCisgICAgICAgIF95YW1sX3Rva2VuX3ZlcnNpb25fZGlyZWN0aXZlX2RhdGFfdCB2ZXJzaW9uX2RpcmVjdGl2ZQorICAgICAgICBfeWFtbF90b2tlbl90YWdfZGlyZWN0aXZlX2RhdGFfdCB0YWdfZGlyZWN0aXZlCisgICAgY3R5cGVkZWYgc3RydWN0IHlhbWxfdG9rZW5fdDoKKyAgICAgICAgeWFtbF90b2tlbl90eXBlX3QgdHlwZQorICAgICAgICBfeWFtbF90b2tlbl9kYXRhX3QgZGF0YQorICAgICAgICB5YW1sX21hcmtfdCBzdGFydF9tYXJrCisgICAgICAgIHlhbWxfbWFya190IGVuZF9tYXJrCisKKyAgICBjdHlwZWRlZiBzdHJ1Y3QgX3lhbWxfZXZlbnRfc3RyZWFtX3N0YXJ0X2RhdGFfdDoKKyAgICAgICAgeWFtbF9lbmNvZGluZ190IGVuY29kaW5nCisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX2V2ZW50X2RvY3VtZW50X3N0YXJ0X2RhdGFfdGFnX2RpcmVjdGl2ZXNfdDoKKyAgICAgICAgeWFtbF90YWdfZGlyZWN0aXZlX3QgKnN0YXJ0CisgICAgICAgIHlhbWxfdGFnX2RpcmVjdGl2ZV90ICplbmQKKyAgICBjdHlwZWRlZiBzdHJ1Y3QgX3lhbWxfZXZlbnRfZG9jdW1lbnRfc3RhcnRfZGF0YV90OgorICAgICAgICB5YW1sX3ZlcnNpb25fZGlyZWN0aXZlX3QgKnZlcnNpb25fZGlyZWN0aXZlCisgICAgICAgIF95YW1sX2V2ZW50X2RvY3VtZW50X3N0YXJ0X2RhdGFfdGFnX2RpcmVjdGl2ZXNfdCB0YWdfZGlyZWN0aXZlcworICAgICAgICBpbnQgaW1wbGljaXQKKyAgICBjdHlwZWRlZiBzdHJ1Y3QgX3lhbWxfZXZlbnRfZG9jdW1lbnRfZW5kX2RhdGFfdDoKKyAgICAgICAgaW50IGltcGxpY2l0CisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX2V2ZW50X2FsaWFzX2RhdGFfdDoKKyAgICAgICAgY2hhciAqYW5jaG9yCisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX2V2ZW50X3NjYWxhcl9kYXRhX3Q6CisgICAgICAgIGNoYXIgKmFuY2hvcgorICAgICAgICBjaGFyICp0YWcKKyAgICAgICAgY2hhciAqdmFsdWUKKyAgICAgICAgc2l6ZV90IGxlbmd0aAorICAgICAgICBpbnQgcGxhaW5faW1wbGljaXQKKyAgICAgICAgaW50IHF1b3RlZF9pbXBsaWNpdAorICAgICAgICB5YW1sX3NjYWxhcl9zdHlsZV90IHN0eWxlCisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX2V2ZW50X3NlcXVlbmNlX3N0YXJ0X2RhdGFfdDoKKyAgICAgICAgY2hhciAqYW5jaG9yCisgICAgICAgIGNoYXIgKnRhZworICAgICAgICBpbnQgaW1wbGljaXQKKyAgICAgICAgeWFtbF9zZXF1ZW5jZV9zdHlsZV90IHN0eWxlCisgICAgY3R5cGVkZWYgc3RydWN0IF95YW1sX2V2ZW50X21hcHBpbmdfc3RhcnRfZGF0YV90OgorICAgICAgICBjaGFyICphbmNob3IKKyAgICAgICAgY2hhciAqdGFnCisgICAgICAgIGludCBpbXBsaWNpdAorICAgICAgICB5YW1sX21hcHBpbmdfc3R5bGVfdCBzdHlsZQorICAgIGN0eXBlZGVmIHVuaW9uIF95YW1sX2V2ZW50X2RhdGFfdDoKKyAgICAgICAgX3lhbWxfZXZlbnRfc3RyZWFtX3N0YXJ0X2RhdGFfdCBzdHJlYW1fc3RhcnQKKyAgICAgICAgX3lhbWxfZXZlbnRfZG9jdW1lbnRfc3RhcnRfZGF0YV90IGRvY3VtZW50X3N0YXJ0CisgICAgICAgIF95YW1sX2V2ZW50X2RvY3VtZW50X2VuZF9kYXRhX3QgZG9jdW1lbnRfZW5kCisgICAgICAgIF95YW1sX2V2ZW50X2FsaWFzX2RhdGFfdCBhbGlhcworICAgICAgICBfeWFtbF9ldmVudF9zY2FsYXJfZGF0YV90IHNjYWxhcgorICAgICAgICBfeWFtbF9ldmVudF9zZXF1ZW5jZV9zdGFydF9kYXRhX3Qgc2VxdWVuY2Vfc3RhcnQKKyAgICAgICAgX3lhbWxfZXZlbnRfbWFwcGluZ19zdGFydF9kYXRhX3QgbWFwcGluZ19zdGFydAorICAgIGN0eXBlZGVmIHN0cnVjdCB5YW1sX2V2ZW50X3Q6CisgICAgICAgIHlhbWxfZXZlbnRfdHlwZV90IHR5cGUKKyAgICAgICAgX3lhbWxfZXZlbnRfZGF0YV90IGRhdGEKKyAgICAgICAgeWFtbF9tYXJrX3Qgc3RhcnRfbWFyaworICAgICAgICB5YW1sX21hcmtfdCBlbmRfbWFyaworCisgICAgY3R5cGVkZWYgc3RydWN0IHlhbWxfcGFyc2VyX3Q6CisgICAgICAgIHlhbWxfZXJyb3JfdHlwZV90IGVycm9yCisgICAgICAgIGNoYXIgKnByb2JsZW0KKyAgICAgICAgc2l6ZV90IHByb2JsZW1fb2Zmc2V0CisgICAgICAgIGludCBwcm9ibGVtX3ZhbHVlCisgICAgICAgIHlhbWxfbWFya190IHByb2JsZW1fbWFyaworICAgICAgICBjaGFyICpjb250ZXh0CisgICAgICAgIHlhbWxfbWFya190IGNvbnRleHRfbWFyaworCisgICAgY3R5cGVkZWYgc3RydWN0IHlhbWxfZW1pdHRlcl90OgorICAgICAgICB5YW1sX2Vycm9yX3R5cGVfdCBlcnJvcgorICAgICAgICBjaGFyICpwcm9ibGVtCisKKyAgICBjaGFyICp5YW1sX2dldF92ZXJzaW9uX3N0cmluZygpCisgICAgdm9pZCB5YW1sX2dldF92ZXJzaW9uKGludCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCisKKyAgICB2b2lkIHlhbWxfdG9rZW5fZGVsZXRlKHlhbWxfdG9rZW5fdCAqdG9rZW4pCisKKyAgICBpbnQgeWFtbF9zdHJlYW1fc3RhcnRfZXZlbnRfaW5pdGlhbGl6ZSh5YW1sX2V2ZW50X3QgKmV2ZW50LAorICAgICAgICAgICAgeWFtbF9lbmNvZGluZ190IGVuY29kaW5nKQorICAgIGludCB5YW1sX3N0cmVhbV9lbmRfZXZlbnRfaW5pdGlhbGl6ZSh5YW1sX2V2ZW50X3QgKmV2ZW50KQorICAgIGludCB5YW1sX2RvY3VtZW50X3N0YXJ0X2V2ZW50X2luaXRpYWxpemUoeWFtbF9ldmVudF90ICpldmVudCwKKyAgICAgICAgICAgIHlhbWxfdmVyc2lvbl9kaXJlY3RpdmVfdCAqdmVyc2lvbl9kaXJlY3RpdmUsCisgICAgICAgICAgICB5YW1sX3RhZ19kaXJlY3RpdmVfdCAqdGFnX2RpcmVjdGl2ZXNfc3RhcnQsCisgICAgICAgICAgICB5YW1sX3RhZ19kaXJlY3RpdmVfdCAqdGFnX2RpcmVjdGl2ZXNfZW5kLAorICAgICAgICAgICAgaW50IGltcGxpY2l0KQorICAgIGludCB5YW1sX2RvY3VtZW50X2VuZF9ldmVudF9pbml0aWFsaXplKHlhbWxfZXZlbnRfdCAqZXZlbnQsCisgICAgICAgICAgICBpbnQgaW1wbGljaXQpCisgICAgaW50IHlhbWxfYWxpYXNfZXZlbnRfaW5pdGlhbGl6ZSh5YW1sX2V2ZW50X3QgKmV2ZW50LCB5YW1sX2NoYXJfdCAqYW5jaG9yKQorICAgIGludCB5YW1sX3NjYWxhcl9ldmVudF9pbml0aWFsaXplKHlhbWxfZXZlbnRfdCAqZXZlbnQsCisgICAgICAgICAgICB5YW1sX2NoYXJfdCAqYW5jaG9yLCB5YW1sX2NoYXJfdCAqdGFnLCB5YW1sX2NoYXJfdCAqdmFsdWUsIGludCBsZW5ndGgsCisgICAgICAgICAgICBpbnQgcGxhaW5faW1wbGljaXQsIGludCBxdW90ZWRfaW1wbGljaXQsCisgICAgICAgICAgICB5YW1sX3NjYWxhcl9zdHlsZV90IHN0eWxlKQorICAgIGludCB5YW1sX3NlcXVlbmNlX3N0YXJ0X2V2ZW50X2luaXRpYWxpemUoeWFtbF9ldmVudF90ICpldmVudCwKKyAgICAgICAgICAgIHlhbWxfY2hhcl90ICphbmNob3IsIHlhbWxfY2hhcl90ICp0YWcsIGludCBpbXBsaWNpdCwgeWFtbF9zZXF1ZW5jZV9zdHlsZV90IHN0eWxlKQorICAgIGludCB5YW1sX3NlcXVlbmNlX2VuZF9ldmVudF9pbml0aWFsaXplKHlhbWxfZXZlbnRfdCAqZXZlbnQpCisgICAgaW50IHlhbWxfbWFwcGluZ19zdGFydF9ldmVudF9pbml0aWFsaXplKHlhbWxfZXZlbnRfdCAqZXZlbnQsCisgICAgICAgICAgICB5YW1sX2NoYXJfdCAqYW5jaG9yLCB5YW1sX2NoYXJfdCAqdGFnLCBpbnQgaW1wbGljaXQsIHlhbWxfbWFwcGluZ19zdHlsZV90IHN0eWxlKQorICAgIGludCB5YW1sX21hcHBpbmdfZW5kX2V2ZW50X2luaXRpYWxpemUoeWFtbF9ldmVudF90ICpldmVudCkKKyAgICB2b2lkIHlhbWxfZXZlbnRfZGVsZXRlKHlhbWxfZXZlbnRfdCAqZXZlbnQpCisKKyAgICBpbnQgeWFtbF9wYXJzZXJfaW5pdGlhbGl6ZSh5YW1sX3BhcnNlcl90ICpwYXJzZXIpCisgICAgdm9pZCB5YW1sX3BhcnNlcl9kZWxldGUoeWFtbF9wYXJzZXJfdCAqcGFyc2VyKQorICAgIHZvaWQgeWFtbF9wYXJzZXJfc2V0X2lucHV0X3N0cmluZyh5YW1sX3BhcnNlcl90ICpwYXJzZXIsCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IHNpemUpCisgICAgdm9pZCB5YW1sX3BhcnNlcl9zZXRfaW5wdXQoeWFtbF9wYXJzZXJfdCAqcGFyc2VyLAorICAgICAgICAgICAgeWFtbF9yZWFkX2hhbmRsZXJfdCAqaGFuZGxlciwgdm9pZCAqZGF0YSkKKyAgICB2b2lkIHlhbWxfcGFyc2VyX3NldF9lbmNvZGluZyh5YW1sX3BhcnNlcl90ICpwYXJzZXIsCisgICAgICAgICAgICB5YW1sX2VuY29kaW5nX3QgZW5jb2RpbmcpCisgICAgaW50IHlhbWxfcGFyc2VyX3NjYW4oeWFtbF9wYXJzZXJfdCAqcGFyc2VyLCB5YW1sX3Rva2VuX3QgKnRva2VuKSBleGNlcHQgKgorICAgIGludCB5YW1sX3BhcnNlcl9wYXJzZSh5YW1sX3BhcnNlcl90ICpwYXJzZXIsIHlhbWxfZXZlbnRfdCAqZXZlbnQpIGV4Y2VwdCAqCisKKyAgICBpbnQgeWFtbF9lbWl0dGVyX2luaXRpYWxpemUoeWFtbF9lbWl0dGVyX3QgKmVtaXR0ZXIpCisgICAgdm9pZCB5YW1sX2VtaXR0ZXJfZGVsZXRlKHlhbWxfZW1pdHRlcl90ICplbWl0dGVyKQorICAgIHZvaWQgeWFtbF9lbWl0dGVyX3NldF9vdXRwdXRfc3RyaW5nKHlhbWxfZW1pdHRlcl90ICplbWl0dGVyLAorICAgICAgICAgICAgY2hhciAqb3V0cHV0LCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpzaXplX3dyaXR0ZW4pCisgICAgdm9pZCB5YW1sX2VtaXR0ZXJfc2V0X291dHB1dCh5YW1sX2VtaXR0ZXJfdCAqZW1pdHRlciwKKyAgICAgICAgICAgIHlhbWxfd3JpdGVfaGFuZGxlcl90ICpoYW5kbGVyLCB2b2lkICpkYXRhKQorICAgIHZvaWQgeWFtbF9lbWl0dGVyX3NldF9lbmNvZGluZyh5YW1sX2VtaXR0ZXJfdCAqZW1pdHRlciwKKyAgICAgICAgICAgIHlhbWxfZW5jb2RpbmdfdCBlbmNvZGluZykKKyAgICB2b2lkIHlhbWxfZW1pdHRlcl9zZXRfY2Fub25pY2FsKHlhbWxfZW1pdHRlcl90ICplbWl0dGVyLCBpbnQgY2Fub25pY2FsKQorICAgIHZvaWQgeWFtbF9lbWl0dGVyX3NldF9pbmRlbnQoeWFtbF9lbWl0dGVyX3QgKmVtaXR0ZXIsIGludCBpbmRlbnQpCisgICAgdm9pZCB5YW1sX2VtaXR0ZXJfc2V0X3dpZHRoKHlhbWxfZW1pdHRlcl90ICplbWl0dGVyLCBpbnQgd2lkdGgpCisgICAgdm9pZCB5YW1sX2VtaXR0ZXJfc2V0X3VuaWNvZGUoeWFtbF9lbWl0dGVyX3QgKmVtaXR0ZXIsIGludCB1bmljb2RlKQorICAgIHZvaWQgeWFtbF9lbWl0dGVyX3NldF9icmVhayh5YW1sX2VtaXR0ZXJfdCAqZW1pdHRlciwKKyAgICAgICAgICAgIHlhbWxfYnJlYWtfdCBsaW5lX2JyZWFrKQorICAgIGludCB5YW1sX2VtaXR0ZXJfZW1pdCh5YW1sX2VtaXR0ZXJfdCAqZW1pdHRlciwgeWFtbF9ldmVudF90ICpldmVudCkgZXhjZXB0ICoKKyAgICBpbnQgeWFtbF9lbWl0dGVyX2ZsdXNoKHlhbWxfZW1pdHRlcl90ICplbWl0dGVyKQorCmRpZmYgLS1naXQgYS95YW1sL195YW1sLnB5eCBiL3lhbWwvX3lhbWwucHl4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZTkzZTIKLS0tIC9kZXYvbnVsbAorKysgYi95YW1sL195YW1sLnB5eApAQCAtMCwwICsxLDEzOTYgQEAKKworaW1wb3J0IHlhbWwKKworZGVmIGdldF92ZXJzaW9uX3N0cmluZygpOgorICAgIGNkZWYgY29uc3QgY2hhciAqdmFsdWUKKyAgICB2YWx1ZSA9IHlhbWxfZ2V0X3ZlcnNpb25fc3RyaW5nKCkKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcodmFsdWUpCisKK2RlZiBnZXRfdmVyc2lvbigpOgorICAgIGNkZWYgaW50IG1ham9yLCBtaW5vciwgcGF0Y2gKKyAgICB5YW1sX2dldF92ZXJzaW9uKCZtYWpvciwgJm1pbm9yLCAmcGF0Y2gpCisgICAgcmV0dXJuIChtYWpvciwgbWlub3IsIHBhdGNoKQorCisjTWFyayA9IHlhbWwuZXJyb3IuTWFyaworWUFNTEVycm9yID0geWFtbC5lcnJvci5ZQU1MRXJyb3IKK1JlYWRlckVycm9yID0geWFtbC5yZWFkZXIuUmVhZGVyRXJyb3IKK1NjYW5uZXJFcnJvciA9IHlhbWwuc2Nhbm5lci5TY2FubmVyRXJyb3IKK1BhcnNlckVycm9yID0geWFtbC5wYXJzZXIuUGFyc2VyRXJyb3IKK0NvbXBvc2VyRXJyb3IgPSB5YW1sLmNvbXBvc2VyLkNvbXBvc2VyRXJyb3IKK0NvbnN0cnVjdG9yRXJyb3IgPSB5YW1sLmNvbnN0cnVjdG9yLkNvbnN0cnVjdG9yRXJyb3IKK0VtaXR0ZXJFcnJvciA9IHlhbWwuZW1pdHRlci5FbWl0dGVyRXJyb3IKK1NlcmlhbGl6ZXJFcnJvciA9IHlhbWwuc2VyaWFsaXplci5TZXJpYWxpemVyRXJyb3IKK1JlcHJlc2VudGVyRXJyb3IgPSB5YW1sLnJlcHJlc2VudGVyLlJlcHJlc2VudGVyRXJyb3IKKworU3RyZWFtU3RhcnRUb2tlbiA9IHlhbWwudG9rZW5zLlN0cmVhbVN0YXJ0VG9rZW4KK1N0cmVhbUVuZFRva2VuID0geWFtbC50b2tlbnMuU3RyZWFtRW5kVG9rZW4KK0RpcmVjdGl2ZVRva2VuID0geWFtbC50b2tlbnMuRGlyZWN0aXZlVG9rZW4KK0RvY3VtZW50U3RhcnRUb2tlbiA9IHlhbWwudG9rZW5zLkRvY3VtZW50U3RhcnRUb2tlbgorRG9jdW1lbnRFbmRUb2tlbiA9IHlhbWwudG9rZW5zLkRvY3VtZW50RW5kVG9rZW4KK0Jsb2NrU2VxdWVuY2VTdGFydFRva2VuID0geWFtbC50b2tlbnMuQmxvY2tTZXF1ZW5jZVN0YXJ0VG9rZW4KK0Jsb2NrTWFwcGluZ1N0YXJ0VG9rZW4gPSB5YW1sLnRva2Vucy5CbG9ja01hcHBpbmdTdGFydFRva2VuCitCbG9ja0VuZFRva2VuID0geWFtbC50b2tlbnMuQmxvY2tFbmRUb2tlbgorRmxvd1NlcXVlbmNlU3RhcnRUb2tlbiA9IHlhbWwudG9rZW5zLkZsb3dTZXF1ZW5jZVN0YXJ0VG9rZW4KK0Zsb3dNYXBwaW5nU3RhcnRUb2tlbiA9IHlhbWwudG9rZW5zLkZsb3dNYXBwaW5nU3RhcnRUb2tlbgorRmxvd1NlcXVlbmNlRW5kVG9rZW4gPSB5YW1sLnRva2Vucy5GbG93U2VxdWVuY2VFbmRUb2tlbgorRmxvd01hcHBpbmdFbmRUb2tlbiA9IHlhbWwudG9rZW5zLkZsb3dNYXBwaW5nRW5kVG9rZW4KK0tleVRva2VuID0geWFtbC50b2tlbnMuS2V5VG9rZW4KK1ZhbHVlVG9rZW4gPSB5YW1sLnRva2Vucy5WYWx1ZVRva2VuCitCbG9ja0VudHJ5VG9rZW4gPSB5YW1sLnRva2Vucy5CbG9ja0VudHJ5VG9rZW4KK0Zsb3dFbnRyeVRva2VuID0geWFtbC50b2tlbnMuRmxvd0VudHJ5VG9rZW4KK0FsaWFzVG9rZW4gPSB5YW1sLnRva2Vucy5BbGlhc1Rva2VuCitBbmNob3JUb2tlbiA9IHlhbWwudG9rZW5zLkFuY2hvclRva2VuCitUYWdUb2tlbiA9IHlhbWwudG9rZW5zLlRhZ1Rva2VuCitTY2FsYXJUb2tlbiA9IHlhbWwudG9rZW5zLlNjYWxhclRva2VuCisKK1N0cmVhbVN0YXJ0RXZlbnQgPSB5YW1sLmV2ZW50cy5TdHJlYW1TdGFydEV2ZW50CitTdHJlYW1FbmRFdmVudCA9IHlhbWwuZXZlbnRzLlN0cmVhbUVuZEV2ZW50CitEb2N1bWVudFN0YXJ0RXZlbnQgPSB5YW1sLmV2ZW50cy5Eb2N1bWVudFN0YXJ0RXZlbnQKK0RvY3VtZW50RW5kRXZlbnQgPSB5YW1sLmV2ZW50cy5Eb2N1bWVudEVuZEV2ZW50CitBbGlhc0V2ZW50ID0geWFtbC5ldmVudHMuQWxpYXNFdmVudAorU2NhbGFyRXZlbnQgPSB5YW1sLmV2ZW50cy5TY2FsYXJFdmVudAorU2VxdWVuY2VTdGFydEV2ZW50ID0geWFtbC5ldmVudHMuU2VxdWVuY2VTdGFydEV2ZW50CitTZXF1ZW5jZUVuZEV2ZW50ID0geWFtbC5ldmVudHMuU2VxdWVuY2VFbmRFdmVudAorTWFwcGluZ1N0YXJ0RXZlbnQgPSB5YW1sLmV2ZW50cy5NYXBwaW5nU3RhcnRFdmVudAorTWFwcGluZ0VuZEV2ZW50ID0geWFtbC5ldmVudHMuTWFwcGluZ0VuZEV2ZW50CisKK1NjYWxhck5vZGUgPSB5YW1sLm5vZGVzLlNjYWxhck5vZGUKK1NlcXVlbmNlTm9kZSA9IHlhbWwubm9kZXMuU2VxdWVuY2VOb2RlCitNYXBwaW5nTm9kZSA9IHlhbWwubm9kZXMuTWFwcGluZ05vZGUKKworY2RlZiBjbGFzcyBNYXJrOgorICAgIGNkZWYgcmVhZG9ubHkgb2JqZWN0IG5hbWUKKyAgICBjZGVmIHJlYWRvbmx5IHNpemVfdCBpbmRleAorICAgIGNkZWYgcmVhZG9ubHkgc2l6ZV90IGxpbmUKKyAgICBjZGVmIHJlYWRvbmx5IHNpemVfdCBjb2x1bW4KKyAgICBjZGVmIHJlYWRvbmx5IGJ1ZmZlcgorICAgIGNkZWYgcmVhZG9ubHkgcG9pbnRlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iamVjdCBuYW1lLCBzaXplX3QgaW5kZXgsIHNpemVfdCBsaW5lLCBzaXplX3QgY29sdW1uLAorICAgICAgICAgICAgb2JqZWN0IGJ1ZmZlciwgb2JqZWN0IHBvaW50ZXIpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuaW5kZXggPSBpbmRleAorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCisgICAgICAgIHNlbGYuY29sdW1uID0gY29sdW1uCisgICAgICAgIHNlbGYuYnVmZmVyID0gYnVmZmVyCisgICAgICAgIHNlbGYucG9pbnRlciA9IHBvaW50ZXIKKworICAgIGRlZiBnZXRfc25pcHBldChzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICB3aGVyZSA9ICIgIGluIFwiJXNcIiwgbGluZSAlZCwgY29sdW1uICVkIiAgIFwKKyAgICAgICAgICAgICAgICAlIChzZWxmLm5hbWUsIHNlbGYubGluZSsxLCBzZWxmLmNvbHVtbisxKQorICAgICAgICByZXR1cm4gd2hlcmUKKworI2NsYXNzIFlBTUxFcnJvcihFeGNlcHRpb24pOgorIyAgICBwYXNzCisjCisjY2xhc3MgTWFya2VkWUFNTEVycm9yKFlBTUxFcnJvcik6CisjCisjICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0PU5vbmUsIGNvbnRleHRfbWFyaz1Ob25lLAorIyAgICAgICAgICAgIHByb2JsZW09Tm9uZSwgcHJvYmxlbV9tYXJrPU5vbmUsIG5vdGU9Tm9uZSk6CisjICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CisjICAgICAgICBzZWxmLmNvbnRleHRfbWFyayA9IGNvbnRleHRfbWFyaworIyAgICAgICAgc2VsZi5wcm9ibGVtID0gcHJvYmxlbQorIyAgICAgICAgc2VsZi5wcm9ibGVtX21hcmsgPSBwcm9ibGVtX21hcmsKKyMgICAgICAgIHNlbGYubm90ZSA9IG5vdGUKKyMKKyMgICAgZGVmIF9fc3RyX18oc2VsZik6CisjICAgICAgICBsaW5lcyA9IFtdCisjICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6CisjICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuY29udGV4dCkKKyMgICAgICAgIGlmIHNlbGYuY29udGV4dF9tYXJrIGlzIG5vdCBOb25lICBcCisjICAgICAgICAgICAgYW5kIChzZWxmLnByb2JsZW0gaXMgTm9uZSBvciBzZWxmLnByb2JsZW1fbWFyayBpcyBOb25lCisjICAgICAgICAgICAgICAgICAgICBvciBzZWxmLmNvbnRleHRfbWFyay5uYW1lICE9IHNlbGYucHJvYmxlbV9tYXJrLm5hbWUKKyMgICAgICAgICAgICAgICAgICAgIG9yIHNlbGYuY29udGV4dF9tYXJrLmxpbmUgIT0gc2VsZi5wcm9ibGVtX21hcmsubGluZQorIyAgICAgICAgICAgICAgICAgICAgb3Igc2VsZi5jb250ZXh0X21hcmsuY29sdW1uICE9IHNlbGYucHJvYmxlbV9tYXJrLmNvbHVtbik6CisjICAgICAgICAgICAgbGluZXMuYXBwZW5kKHN0cihzZWxmLmNvbnRleHRfbWFyaykpCisjICAgICAgICBpZiBzZWxmLnByb2JsZW0gaXMgbm90IE5vbmU6CisjICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYucHJvYmxlbSkKKyMgICAgICAgIGlmIHNlbGYucHJvYmxlbV9tYXJrIGlzIG5vdCBOb25lOgorIyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzdHIoc2VsZi5wcm9ibGVtX21hcmspKQorIyAgICAgICAgaWYgc2VsZi5ub3RlIGlzIG5vdCBOb25lOgorIyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLm5vdGUpCisjICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorIworI2NsYXNzIFJlYWRlckVycm9yKFlBTUxFcnJvcik6CisjCisjICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwb3NpdGlvbiwgY2hhcmFjdGVyLCBlbmNvZGluZywgcmVhc29uKToKKyMgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyMgICAgICAgIHNlbGYuY2hhcmFjdGVyID0gY2hhcmFjdGVyCisjICAgICAgICBzZWxmLnBvc2l0aW9uID0gcG9zaXRpb24KKyMgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworIyAgICAgICAgc2VsZi5yZWFzb24gPSByZWFzb24KKyMKKyMgICAgZGVmIF9fc3RyX18oc2VsZik6CisjICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY2hhcmFjdGVyLCBzdHIpOgorIyAgICAgICAgICAgIHJldHVybiAiJyVzJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAjeCUwMng6ICVzXG4iICBcCisjICAgICAgICAgICAgICAgICAgICAiICBpbiBcIiVzXCIsIHBvc2l0aW9uICVkIiAgICBcCisjICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmVuY29kaW5nLCBvcmQoc2VsZi5jaGFyYWN0ZXIpLCBzZWxmLnJlYXNvbiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBzZWxmLnBvc2l0aW9uKQorIyAgICAgICAgZWxzZToKKyMgICAgICAgICAgICByZXR1cm4gInVuYWNjZXB0YWJsZSBjaGFyYWN0ZXIgI3glMDR4OiAlc1xuIiAgICBcCisjICAgICAgICAgICAgICAgICAgICAiICBpbiBcIiVzXCIsIHBvc2l0aW9uICVkIiAgICBcCisjICAgICAgICAgICAgICAgICAgICAlIChvcmQoc2VsZi5jaGFyYWN0ZXIpLCBzZWxmLnJlYXNvbiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBzZWxmLnBvc2l0aW9uKQorIworI2NsYXNzIFNjYW5uZXJFcnJvcihNYXJrZWRZQU1MRXJyb3IpOgorIyAgICBwYXNzCisjCisjY2xhc3MgUGFyc2VyRXJyb3IoTWFya2VkWUFNTEVycm9yKToKKyMgICAgcGFzcworIworI2NsYXNzIEVtaXR0ZXJFcnJvcihZQU1MRXJyb3IpOgorIyAgICBwYXNzCisjCisjY2RlZiBjbGFzcyBUb2tlbjoKKyMgICAgY2RlZiByZWFkb25seSBNYXJrIHN0YXJ0X21hcmsKKyMgICAgY2RlZiByZWFkb25seSBNYXJrIGVuZF9tYXJrCisjICAgIGRlZiBfX2luaXRfXyhzZWxmLCBNYXJrIHN0YXJ0X21hcmssIE1hcmsgZW5kX21hcmspOgorIyAgICAgICAgc2VsZi5zdGFydF9tYXJrID0gc3RhcnRfbWFyaworIyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisjCisjY2RlZiBjbGFzcyBTdHJlYW1TdGFydFRva2VuKFRva2VuKToKKyMgICAgY2RlZiByZWFkb25seSBvYmplY3QgZW5jb2RpbmcKKyMgICAgZGVmIF9faW5pdF9fKHNlbGYsIE1hcmsgc3RhcnRfbWFyaywgTWFyayBlbmRfbWFyaywgZW5jb2RpbmcpOgorIyAgICAgICAgc2VsZi5zdGFydF9tYXJrID0gc3RhcnRfbWFyaworIyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisjICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKKyMKKyNjZGVmIGNsYXNzIFN0cmVhbUVuZFRva2VuKFRva2VuKToKKyMgICAgcGFzcworIworI2NkZWYgY2xhc3MgRGlyZWN0aXZlVG9rZW4oVG9rZW4pOgorIyAgICBjZGVmIHJlYWRvbmx5IG9iamVjdCBuYW1lCisjICAgIGNkZWYgcmVhZG9ubHkgb2JqZWN0IHZhbHVlCisjICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB2YWx1ZSwgTWFyayBzdGFydF9tYXJrLCBNYXJrIGVuZF9tYXJrKToKKyMgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyMgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorIyAgICAgICAgc2VsZi5zdGFydF9tYXJrID0gc3RhcnRfbWFyaworIyAgICAgICAgc2VsZi5lbmRfbWFyayA9IGVuZF9tYXJrCisjCisjY2RlZiBjbGFzcyBEb2N1bWVudFN0YXJ0VG9rZW4oVG9rZW4pOgorIyAgICBwYXNzCisjCisjY2RlZiBjbGFzcyBEb2N1bWVudEVuZFRva2VuKFRva2VuKToKKyMgICAgcGFzcworIworI2NkZWYgY2xhc3MgQmxvY2tTZXF1ZW5jZVN0YXJ0VG9rZW4oVG9rZW4pOgorIyAgICBwYXNzCisjCisjY2RlZiBjbGFzcyBCbG9ja01hcHBpbmdTdGFydFRva2VuKFRva2VuKToKKyMgICAgcGFzcworIworI2NkZWYgY2xhc3MgQmxvY2tFbmRUb2tlbihUb2tlbik6CisjICAgIHBhc3MKKyMKKyNjZGVmIGNsYXNzIEZsb3dTZXF1ZW5jZVN0YXJ0VG9rZW4oVG9rZW4pOgorIyAgICBwYXNzCisjCisjY2RlZiBjbGFzcyBGbG93TWFwcGluZ1N0YXJ0VG9rZW4oVG9rZW4pOgorIyAgICBwYXNzCisjCisjY2RlZiBjbGFzcyBGbG93U2VxdWVuY2VFbmRUb2tlbihUb2tlbik6CisjICAgIHBhc3MKKyMKKyNjZGVmIGNsYXNzIEZsb3dNYXBwaW5nRW5kVG9rZW4oVG9rZW4pOgorIyAgICBwYXNzCisjCisjY2RlZiBjbGFzcyBLZXlUb2tlbihUb2tlbik6CisjICAgIHBhc3MKKyMKKyNjZGVmIGNsYXNzIFZhbHVlVG9rZW4oVG9rZW4pOgorIyAgICBwYXNzCisjCisjY2RlZiBjbGFzcyBCbG9ja0VudHJ5VG9rZW4oVG9rZW4pOgorIyAgICBwYXNzCisjCisjY2RlZiBjbGFzcyBGbG93RW50cnlUb2tlbihUb2tlbik6CisjICAgIHBhc3MKKyMKKyNjZGVmIGNsYXNzIEFsaWFzVG9rZW4oVG9rZW4pOgorIyAgICBjZGVmIHJlYWRvbmx5IG9iamVjdCB2YWx1ZQorIyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIE1hcmsgc3RhcnRfbWFyaywgTWFyayBlbmRfbWFyayk6CisjICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyMgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyMgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworIworI2NkZWYgY2xhc3MgQW5jaG9yVG9rZW4oVG9rZW4pOgorIyAgICBjZGVmIHJlYWRvbmx5IG9iamVjdCB2YWx1ZQorIyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIE1hcmsgc3RhcnRfbWFyaywgTWFyayBlbmRfbWFyayk6CisjICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyMgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyMgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworIworI2NkZWYgY2xhc3MgVGFnVG9rZW4oVG9rZW4pOgorIyAgICBjZGVmIHJlYWRvbmx5IG9iamVjdCB2YWx1ZQorIyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIE1hcmsgc3RhcnRfbWFyaywgTWFyayBlbmRfbWFyayk6CisjICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyMgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyMgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworIworI2NkZWYgY2xhc3MgU2NhbGFyVG9rZW4oVG9rZW4pOgorIyAgICBjZGVmIHJlYWRvbmx5IG9iamVjdCB2YWx1ZQorIyAgICBjZGVmIHJlYWRvbmx5IG9iamVjdCBwbGFpbgorIyAgICBjZGVmIHJlYWRvbmx5IG9iamVjdCBzdHlsZQorIyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIHBsYWluLCBNYXJrIHN0YXJ0X21hcmssIE1hcmsgZW5kX21hcmssIHN0eWxlPU5vbmUpOgorIyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisjICAgICAgICBzZWxmLnBsYWluID0gcGxhaW4KKyMgICAgICAgIHNlbGYuc3RhcnRfbWFyayA9IHN0YXJ0X21hcmsKKyMgICAgICAgIHNlbGYuZW5kX21hcmsgPSBlbmRfbWFyaworIyAgICAgICAgc2VsZi5zdHlsZSA9IHN0eWxlCisKK2NkZWYgY2xhc3MgQ1BhcnNlcjoKKworICAgIGNkZWYgeWFtbF9wYXJzZXJfdCBwYXJzZXIKKyAgICBjZGVmIHlhbWxfZXZlbnRfdCBwYXJzZWRfZXZlbnQKKworICAgIGNkZWYgb2JqZWN0IHN0cmVhbQorICAgIGNkZWYgb2JqZWN0IHN0cmVhbV9uYW1lCisgICAgY2RlZiBvYmplY3QgY3VycmVudF90b2tlbgorICAgIGNkZWYgb2JqZWN0IGN1cnJlbnRfZXZlbnQKKyAgICBjZGVmIG9iamVjdCBhbmNob3JzCisgICAgY2RlZiBvYmplY3Qgc3RyZWFtX2NhY2hlCisgICAgY2RlZiBpbnQgc3RyZWFtX2NhY2hlX2xlbgorICAgIGNkZWYgaW50IHN0cmVhbV9jYWNoZV9wb3MKKyAgICBjZGVmIGludCB1bmljb2RlX3NvdXJjZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSk6CisgICAgICAgIGNkZWYgaXNfcmVhZGFibGUKKyAgICAgICAgaWYgeWFtbF9wYXJzZXJfaW5pdGlhbGl6ZSgmc2VsZi5wYXJzZXIpID09IDA6CisgICAgICAgICAgICByYWlzZSBNZW1vcnlFcnJvcgorICAgICAgICBzZWxmLnBhcnNlZF9ldmVudC50eXBlID0gWUFNTF9OT19FVkVOVAorICAgICAgICBpc19yZWFkYWJsZSA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3RyZWFtLnJlYWQKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgaXNfcmVhZGFibGUgPSAwCisgICAgICAgIHNlbGYudW5pY29kZV9zb3VyY2UgPSAwCisgICAgICAgIGlmIGlzX3JlYWRhYmxlOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9uYW1lID0gc3RyZWFtLm5hbWUKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9uYW1lID0gdSc8ZmlsZT4nCisgICAgICAgICAgICBzZWxmLnN0cmVhbV9jYWNoZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtX2NhY2hlX2xlbiA9IDAKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtX2NhY2hlX3BvcyA9IDAKKyAgICAgICAgICAgIHlhbWxfcGFyc2VyX3NldF9pbnB1dCgmc2VsZi5wYXJzZXIsIGlucHV0X2hhbmRsZXIsIDx2b2lkICo+c2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIFB5VW5pY29kZV9DaGVja0V4YWN0KHN0cmVhbSkgIT0gMDoKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKHN0cmVhbSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9uYW1lID0gdSc8dW5pY29kZSBzdHJpbmc+JworICAgICAgICAgICAgICAgIHNlbGYudW5pY29kZV9zb3VyY2UgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX25hbWUgPSB1JzxieXRlIHN0cmluZz4nCisgICAgICAgICAgICBpZiBQeUJ5dGVzX0NoZWNrRXhhY3Qoc3RyZWFtKSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcih1ImEgc3RyaW5nIG9yIHN0cmVhbSBpbnB1dCBpcyByZXF1aXJlZCIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQorICAgICAgICAgICAgeWFtbF9wYXJzZXJfc2V0X2lucHV0X3N0cmluZygmc2VsZi5wYXJzZXIsIFB5Qnl0ZXNfQVNfWWFtbF9TVFJJTkcoc3RyZWFtKSwgUHlCeXRlc19HRVRfU0laRShzdHJlYW0pKQorICAgICAgICBzZWxmLmN1cnJlbnRfdG9rZW4gPSBOb25lCisgICAgICAgIHNlbGYuY3VycmVudF9ldmVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5hbmNob3JzID0ge30KKworICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKyAgICAgICAgeWFtbF9wYXJzZXJfZGVsZXRlKCZzZWxmLnBhcnNlcikKKyAgICAgICAgeWFtbF9ldmVudF9kZWxldGUoJnNlbGYucGFyc2VkX2V2ZW50KQorCisgICAgZGVmIGRpc3Bvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGNkZWYgb2JqZWN0IF9wYXJzZXJfZXJyb3Ioc2VsZik6CisgICAgICAgIGlmIHNlbGYucGFyc2VyLmVycm9yID09IFlBTUxfTUVNT1JZX0VSUk9SOgorICAgICAgICAgICAgcmV0dXJuIE1lbW9yeUVycm9yCisgICAgICAgIGVsaWYgc2VsZi5wYXJzZXIuZXJyb3IgPT0gWUFNTF9SRUFERVJfRVJST1I6CisgICAgICAgICAgICByZXR1cm4gUmVhZGVyRXJyb3Ioc2VsZi5zdHJlYW1fbmFtZSwgc2VsZi5wYXJzZXIucHJvYmxlbV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLnByb2JsZW1fdmFsdWUsIHUnPycsIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHNlbGYucGFyc2VyLnByb2JsZW0pKQorICAgICAgICBlbGlmIHNlbGYucGFyc2VyLmVycm9yID09IFlBTUxfU0NBTk5FUl9FUlJPUiAgICBcCisgICAgICAgICAgICAgICAgb3Igc2VsZi5wYXJzZXIuZXJyb3IgPT0gWUFNTF9QQVJTRVJfRVJST1I6CisgICAgICAgICAgICBjb250ZXh0X21hcmsgPSBOb25lCisgICAgICAgICAgICBwcm9ibGVtX21hcmsgPSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLnBhcnNlci5jb250ZXh0ICE9IE5VTEw6CisgICAgICAgICAgICAgICAgY29udGV4dF9tYXJrID0gTWFyayhzZWxmLnN0cmVhbV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuY29udGV4dF9tYXJrLmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuY29udGV4dF9tYXJrLmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5jb250ZXh0X21hcmsuY29sdW1uLCBOb25lLCBOb25lKQorICAgICAgICAgICAgaWYgc2VsZi5wYXJzZXIucHJvYmxlbSAhPSBOVUxMOgorICAgICAgICAgICAgICAgIHByb2JsZW1fbWFyayA9IE1hcmsoc2VsZi5zdHJlYW1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLnByb2JsZW1fbWFyay5pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLnByb2JsZW1fbWFyay5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIucHJvYmxlbV9tYXJrLmNvbHVtbiwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIGNvbnRleHQgPSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLnBhcnNlci5jb250ZXh0ICE9IE5VTEw6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHNlbGYucGFyc2VyLmNvbnRleHQpCisgICAgICAgICAgICBwcm9ibGVtID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoc2VsZi5wYXJzZXIucHJvYmxlbSkKKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VyLmVycm9yID09IFlBTUxfU0NBTk5FUl9FUlJPUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gU2Nhbm5lckVycm9yKGNvbnRleHQsIGNvbnRleHRfbWFyaywgcHJvYmxlbSwgcHJvYmxlbV9tYXJrKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3IoY29udGV4dCwgY29udGV4dF9tYXJrLCBwcm9ibGVtLCBwcm9ibGVtX21hcmspCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IodSJubyBwYXJzZXIgZXJyb3IiKQorCisgICAgZGVmIHJhd19zY2FuKHNlbGYpOgorICAgICAgICBjZGVmIHlhbWxfdG9rZW5fdCB0b2tlbgorICAgICAgICBjZGVmIGludCBkb25lCisgICAgICAgIGNkZWYgaW50IGNvdW50CisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBkb25lID0gMAorICAgICAgICB3aGlsZSBkb25lID09IDA6CisgICAgICAgICAgICBpZiB5YW1sX3BhcnNlcl9zY2FuKCZzZWxmLnBhcnNlciwgJnRva2VuKSA9PSAwOgorICAgICAgICAgICAgICAgIGVycm9yID0gc2VsZi5fcGFyc2VyX2Vycm9yKCkKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcgorICAgICAgICAgICAgaWYgdG9rZW4udHlwZSA9PSBZQU1MX05PX1RPS0VOOgorICAgICAgICAgICAgICAgIGRvbmUgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQrMQorICAgICAgICAgICAgeWFtbF90b2tlbl9kZWxldGUoJnRva2VuKQorICAgICAgICByZXR1cm4gY291bnQKKworICAgIGNkZWYgb2JqZWN0IF9zY2FuKHNlbGYpOgorICAgICAgICBjZGVmIHlhbWxfdG9rZW5fdCB0b2tlbgorICAgICAgICBpZiB5YW1sX3BhcnNlcl9zY2FuKCZzZWxmLnBhcnNlciwgJnRva2VuKSA9PSAwOgorICAgICAgICAgICAgZXJyb3IgPSBzZWxmLl9wYXJzZXJfZXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgZXJyb3IKKyAgICAgICAgdG9rZW5fb2JqZWN0ID0gc2VsZi5fdG9rZW5fdG9fb2JqZWN0KCZ0b2tlbikKKyAgICAgICAgeWFtbF90b2tlbl9kZWxldGUoJnRva2VuKQorICAgICAgICByZXR1cm4gdG9rZW5fb2JqZWN0CisKKyAgICBjZGVmIG9iamVjdCBfdG9rZW5fdG9fb2JqZWN0KHNlbGYsIHlhbWxfdG9rZW5fdCAqdG9rZW4pOgorICAgICAgICBzdGFydF9tYXJrID0gTWFyayhzZWxmLnN0cmVhbV9uYW1lLAorICAgICAgICAgICAgICAgIHRva2VuLnN0YXJ0X21hcmsuaW5kZXgsCisgICAgICAgICAgICAgICAgdG9rZW4uc3RhcnRfbWFyay5saW5lLAorICAgICAgICAgICAgICAgIHRva2VuLnN0YXJ0X21hcmsuY29sdW1uLAorICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpCisgICAgICAgIGVuZF9tYXJrID0gTWFyayhzZWxmLnN0cmVhbV9uYW1lLAorICAgICAgICAgICAgICAgIHRva2VuLmVuZF9tYXJrLmluZGV4LAorICAgICAgICAgICAgICAgIHRva2VuLmVuZF9tYXJrLmxpbmUsCisgICAgICAgICAgICAgICAgdG9rZW4uZW5kX21hcmsuY29sdW1uLAorICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpCisgICAgICAgIGlmIHRva2VuLnR5cGUgPT0gWUFNTF9OT19UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsaWYgdG9rZW4udHlwZSA9PSBZQU1MX1NUUkVBTV9TVEFSVF9UT0tFTjoKKyAgICAgICAgICAgIGVuY29kaW5nID0gTm9uZQorICAgICAgICAgICAgaWYgdG9rZW4uZGF0YS5zdHJlYW1fc3RhcnQuZW5jb2RpbmcgPT0gWUFNTF9VVEY4X0VOQ09ESU5HOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudW5pY29kZV9zb3VyY2UgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSB1InV0Zi04IgorICAgICAgICAgICAgZWxpZiB0b2tlbi5kYXRhLnN0cmVhbV9zdGFydC5lbmNvZGluZyA9PSBZQU1MX1VURjE2TEVfRU5DT0RJTkc6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSB1InV0Zi0xNi1sZSIKKyAgICAgICAgICAgIGVsaWYgdG9rZW4uZGF0YS5zdHJlYW1fc3RhcnQuZW5jb2RpbmcgPT0gWUFNTF9VVEYxNkJFX0VOQ09ESU5HOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gdSJ1dGYtMTYtYmUiCisgICAgICAgICAgICByZXR1cm4gU3RyZWFtU3RhcnRUb2tlbihzdGFydF9tYXJrLCBlbmRfbWFyaywgZW5jb2RpbmcpCisgICAgICAgIGVsaWYgdG9rZW4udHlwZSA9PSBZQU1MX1NUUkVBTV9FTkRfVE9LRU46CisgICAgICAgICAgICByZXR1cm4gU3RyZWFtRW5kVG9rZW4oc3RhcnRfbWFyaywgZW5kX21hcmspCisgICAgICAgIGVsaWYgdG9rZW4udHlwZSA9PSBZQU1MX1ZFUlNJT05fRElSRUNUSVZFX1RPS0VOOgorICAgICAgICAgICAgcmV0dXJuIERpcmVjdGl2ZVRva2VuKHUiWUFNTCIsCisgICAgICAgICAgICAgICAgICAgICh0b2tlbi5kYXRhLnZlcnNpb25fZGlyZWN0aXZlLm1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4uZGF0YS52ZXJzaW9uX2RpcmVjdGl2ZS5taW5vciksCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIHRva2VuLnR5cGUgPT0gWUFNTF9UQUdfRElSRUNUSVZFX1RPS0VOOgorICAgICAgICAgICAgaGFuZGxlID0gUHlVbmljb2RlX0Zyb21ZYW1sU3RyaW5nKHRva2VuLmRhdGEudGFnX2RpcmVjdGl2ZS5oYW5kbGUpCisgICAgICAgICAgICBwcmVmaXggPSBQeVVuaWNvZGVfRnJvbVlhbWxTdHJpbmcodG9rZW4uZGF0YS50YWdfZGlyZWN0aXZlLnByZWZpeCkKKyAgICAgICAgICAgIHJldHVybiBEaXJlY3RpdmVUb2tlbih1IlRBRyIsIChoYW5kbGUsIHByZWZpeCksCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIHRva2VuLnR5cGUgPT0gWUFNTF9ET0NVTUVOVF9TVEFSVF9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBEb2N1bWVudFN0YXJ0VG9rZW4oc3RhcnRfbWFyaywgZW5kX21hcmspCisgICAgICAgIGVsaWYgdG9rZW4udHlwZSA9PSBZQU1MX0RPQ1VNRU5UX0VORF9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBEb2N1bWVudEVuZFRva2VuKHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIHRva2VuLnR5cGUgPT0gWUFNTF9CTE9DS19TRVFVRU5DRV9TVEFSVF9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBCbG9ja1NlcXVlbmNlU3RhcnRUb2tlbihzdGFydF9tYXJrLCBlbmRfbWFyaykKKyAgICAgICAgZWxpZiB0b2tlbi50eXBlID09IFlBTUxfQkxPQ0tfTUFQUElOR19TVEFSVF9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBCbG9ja01hcHBpbmdTdGFydFRva2VuKHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIHRva2VuLnR5cGUgPT0gWUFNTF9CTE9DS19FTkRfVE9LRU46CisgICAgICAgICAgICByZXR1cm4gQmxvY2tFbmRUb2tlbihzdGFydF9tYXJrLCBlbmRfbWFyaykKKyAgICAgICAgZWxpZiB0b2tlbi50eXBlID09IFlBTUxfRkxPV19TRVFVRU5DRV9TVEFSVF9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBGbG93U2VxdWVuY2VTdGFydFRva2VuKHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIHRva2VuLnR5cGUgPT0gWUFNTF9GTE9XX1NFUVVFTkNFX0VORF9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBGbG93U2VxdWVuY2VFbmRUb2tlbihzdGFydF9tYXJrLCBlbmRfbWFyaykKKyAgICAgICAgZWxpZiB0b2tlbi50eXBlID09IFlBTUxfRkxPV19NQVBQSU5HX1NUQVJUX1RPS0VOOgorICAgICAgICAgICAgcmV0dXJuIEZsb3dNYXBwaW5nU3RhcnRUb2tlbihzdGFydF9tYXJrLCBlbmRfbWFyaykKKyAgICAgICAgZWxpZiB0b2tlbi50eXBlID09IFlBTUxfRkxPV19NQVBQSU5HX0VORF9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBGbG93TWFwcGluZ0VuZFRva2VuKHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIHRva2VuLnR5cGUgPT0gWUFNTF9CTE9DS19FTlRSWV9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBCbG9ja0VudHJ5VG9rZW4oc3RhcnRfbWFyaywgZW5kX21hcmspCisgICAgICAgIGVsaWYgdG9rZW4udHlwZSA9PSBZQU1MX0ZMT1dfRU5UUllfVE9LRU46CisgICAgICAgICAgICByZXR1cm4gRmxvd0VudHJ5VG9rZW4oc3RhcnRfbWFyaywgZW5kX21hcmspCisgICAgICAgIGVsaWYgdG9rZW4udHlwZSA9PSBZQU1MX0tFWV9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBLZXlUb2tlbihzdGFydF9tYXJrLCBlbmRfbWFyaykKKyAgICAgICAgZWxpZiB0b2tlbi50eXBlID09IFlBTUxfVkFMVUVfVE9LRU46CisgICAgICAgICAgICByZXR1cm4gVmFsdWVUb2tlbihzdGFydF9tYXJrLCBlbmRfbWFyaykKKyAgICAgICAgZWxpZiB0b2tlbi50eXBlID09IFlBTUxfQUxJQVNfVE9LRU46CisgICAgICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyh0b2tlbi5kYXRhLmFsaWFzLnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIEFsaWFzVG9rZW4odmFsdWUsIHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIHRva2VuLnR5cGUgPT0gWUFNTF9BTkNIT1JfVE9LRU46CisgICAgICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyh0b2tlbi5kYXRhLmFuY2hvci52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBBbmNob3JUb2tlbih2YWx1ZSwgc3RhcnRfbWFyaywgZW5kX21hcmspCisgICAgICAgIGVsaWYgdG9rZW4udHlwZSA9PSBZQU1MX1RBR19UT0tFTjoKKyAgICAgICAgICAgIGhhbmRsZSA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyh0b2tlbi5kYXRhLnRhZy5oYW5kbGUpCisgICAgICAgICAgICBzdWZmaXggPSBQeVVuaWNvZGVfRnJvbVlhbWxTdHJpbmcodG9rZW4uZGF0YS50YWcuc3VmZml4KQorICAgICAgICAgICAgaWYgbm90IGhhbmRsZToKKyAgICAgICAgICAgICAgICBoYW5kbGUgPSBOb25lCisgICAgICAgICAgICByZXR1cm4gVGFnVG9rZW4oKGhhbmRsZSwgc3VmZml4KSwgc3RhcnRfbWFyaywgZW5kX21hcmspCisgICAgICAgIGVsaWYgdG9rZW4udHlwZSA9PSBZQU1MX1NDQUxBUl9UT0tFTjoKKyAgICAgICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0RlY29kZVVURjgoPGNoYXIgKj50b2tlbi5kYXRhLnNjYWxhci52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4uZGF0YS5zY2FsYXIubGVuZ3RoLCAnc3RyaWN0JykKKyAgICAgICAgICAgIHBsYWluID0gRmFsc2UKKyAgICAgICAgICAgIHN0eWxlID0gTm9uZQorICAgICAgICAgICAgaWYgdG9rZW4uZGF0YS5zY2FsYXIuc3R5bGUgPT0gWUFNTF9QTEFJTl9TQ0FMQVJfU1RZTEU6CisgICAgICAgICAgICAgICAgcGxhaW4gPSBUcnVlCisgICAgICAgICAgICAgICAgc3R5bGUgPSB1JycKKyAgICAgICAgICAgIGVsaWYgdG9rZW4uZGF0YS5zY2FsYXIuc3R5bGUgPT0gWUFNTF9TSU5HTEVfUVVPVEVEX1NDQUxBUl9TVFlMRToKKyAgICAgICAgICAgICAgICBzdHlsZSA9IHUnXCcnCisgICAgICAgICAgICBlbGlmIHRva2VuLmRhdGEuc2NhbGFyLnN0eWxlID09IFlBTUxfRE9VQkxFX1FVT1RFRF9TQ0FMQVJfU1RZTEU6CisgICAgICAgICAgICAgICAgc3R5bGUgPSB1JyInCisgICAgICAgICAgICBlbGlmIHRva2VuLmRhdGEuc2NhbGFyLnN0eWxlID09IFlBTUxfTElURVJBTF9TQ0FMQVJfU1RZTEU6CisgICAgICAgICAgICAgICAgc3R5bGUgPSB1J3wnCisgICAgICAgICAgICBlbGlmIHRva2VuLmRhdGEuc2NhbGFyLnN0eWxlID09IFlBTUxfRk9MREVEX1NDQUxBUl9TVFlMRToKKyAgICAgICAgICAgICAgICBzdHlsZSA9IHUnPicKKyAgICAgICAgICAgIHJldHVybiBTY2FsYXJUb2tlbih2YWx1ZSwgcGxhaW4sCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X21hcmssIGVuZF9tYXJrLCBzdHlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IodSJ1bmtub3duIHRva2VuIHR5cGUiKQorCisgICAgZGVmIGdldF90b2tlbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3Rva2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmN1cnJlbnRfdG9rZW4KKyAgICAgICAgICAgIHNlbGYuY3VycmVudF90b2tlbiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fc2NhbigpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHBlZWtfdG9rZW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF90b2tlbiBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3Rva2VuID0gc2VsZi5fc2NhbigpCisgICAgICAgIHJldHVybiBzZWxmLmN1cnJlbnRfdG9rZW4KKworICAgIGRlZiBjaGVja190b2tlbihzZWxmLCAqY2hvaWNlcyk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF90b2tlbiBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3Rva2VuID0gc2VsZi5fc2NhbigpCisgICAgICAgIGlmIHNlbGYuY3VycmVudF90b2tlbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBjaG9pY2VzOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdG9rZW5fY2xhc3MgPSBzZWxmLmN1cnJlbnRfdG9rZW4uX19jbGFzc19fCisgICAgICAgIGZvciBjaG9pY2UgaW4gY2hvaWNlczoKKyAgICAgICAgICAgIGlmIHRva2VuX2NsYXNzIGlzIGNob2ljZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiByYXdfcGFyc2Uoc2VsZik6CisgICAgICAgIGNkZWYgeWFtbF9ldmVudF90IGV2ZW50CisgICAgICAgIGNkZWYgaW50IGRvbmUKKyAgICAgICAgY2RlZiBpbnQgY291bnQKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGRvbmUgPSAwCisgICAgICAgIHdoaWxlIGRvbmUgPT0gMDoKKyAgICAgICAgICAgIGlmIHlhbWxfcGFyc2VyX3BhcnNlKCZzZWxmLnBhcnNlciwgJmV2ZW50KSA9PSAwOgorICAgICAgICAgICAgICAgIGVycm9yID0gc2VsZi5fcGFyc2VyX2Vycm9yKCkKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcgorICAgICAgICAgICAgaWYgZXZlbnQudHlwZSA9PSBZQU1MX05PX0VWRU5UOgorICAgICAgICAgICAgICAgIGRvbmUgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQrMQorICAgICAgICAgICAgeWFtbF9ldmVudF9kZWxldGUoJmV2ZW50KQorICAgICAgICByZXR1cm4gY291bnQKKworICAgIGNkZWYgb2JqZWN0IF9wYXJzZShzZWxmKToKKyAgICAgICAgY2RlZiB5YW1sX2V2ZW50X3QgZXZlbnQKKyAgICAgICAgaWYgeWFtbF9wYXJzZXJfcGFyc2UoJnNlbGYucGFyc2VyLCAmZXZlbnQpID09IDA6CisgICAgICAgICAgICBlcnJvciA9IHNlbGYuX3BhcnNlcl9lcnJvcigpCisgICAgICAgICAgICByYWlzZSBlcnJvcgorICAgICAgICBldmVudF9vYmplY3QgPSBzZWxmLl9ldmVudF90b19vYmplY3QoJmV2ZW50KQorICAgICAgICB5YW1sX2V2ZW50X2RlbGV0ZSgmZXZlbnQpCisgICAgICAgIHJldHVybiBldmVudF9vYmplY3QKKworICAgIGNkZWYgb2JqZWN0IF9ldmVudF90b19vYmplY3Qoc2VsZiwgeWFtbF9ldmVudF90ICpldmVudCk6CisgICAgICAgIGNkZWYgeWFtbF90YWdfZGlyZWN0aXZlX3QgKnRhZ19kaXJlY3RpdmUKKyAgICAgICAgc3RhcnRfbWFyayA9IE1hcmsoc2VsZi5zdHJlYW1fbmFtZSwKKyAgICAgICAgICAgICAgICBldmVudC5zdGFydF9tYXJrLmluZGV4LAorICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0X21hcmsubGluZSwKKyAgICAgICAgICAgICAgICBldmVudC5zdGFydF9tYXJrLmNvbHVtbiwKKyAgICAgICAgICAgICAgICBOb25lLCBOb25lKQorICAgICAgICBlbmRfbWFyayA9IE1hcmsoc2VsZi5zdHJlYW1fbmFtZSwKKyAgICAgICAgICAgICAgICBldmVudC5lbmRfbWFyay5pbmRleCwKKyAgICAgICAgICAgICAgICBldmVudC5lbmRfbWFyay5saW5lLAorICAgICAgICAgICAgICAgIGV2ZW50LmVuZF9tYXJrLmNvbHVtbiwKKyAgICAgICAgICAgICAgICBOb25lLCBOb25lKQorICAgICAgICBpZiBldmVudC50eXBlID09IFlBTUxfTk9fRVZFTlQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gWUFNTF9TVFJFQU1fU1RBUlRfRVZFTlQ6CisgICAgICAgICAgICBlbmNvZGluZyA9IE5vbmUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEuc3RyZWFtX3N0YXJ0LmVuY29kaW5nID09IFlBTUxfVVRGOF9FTkNPRElORzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnVuaWNvZGVfc291cmNlID09IDA6CisgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gdSJ1dGYtOCIKKyAgICAgICAgICAgIGVsaWYgZXZlbnQuZGF0YS5zdHJlYW1fc3RhcnQuZW5jb2RpbmcgPT0gWUFNTF9VVEYxNkxFX0VOQ09ESU5HOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gdSJ1dGYtMTYtbGUiCisgICAgICAgICAgICBlbGlmIGV2ZW50LmRhdGEuc3RyZWFtX3N0YXJ0LmVuY29kaW5nID09IFlBTUxfVVRGMTZCRV9FTkNPRElORzoKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IHUidXRmLTE2LWJlIgorICAgICAgICAgICAgcmV0dXJuIFN0cmVhbVN0YXJ0RXZlbnQoc3RhcnRfbWFyaywgZW5kX21hcmssIGVuY29kaW5nKQorICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gWUFNTF9TVFJFQU1fRU5EX0VWRU5UOgorICAgICAgICAgICAgcmV0dXJuIFN0cmVhbUVuZEV2ZW50KHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVDoKKyAgICAgICAgICAgIGV4cGxpY2l0ID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEuZG9jdW1lbnRfc3RhcnQuaW1wbGljaXQgPT0gMDoKKyAgICAgICAgICAgICAgICBleHBsaWNpdCA9IFRydWUKKyAgICAgICAgICAgIHZlcnNpb24gPSBOb25lCisgICAgICAgICAgICBpZiBldmVudC5kYXRhLmRvY3VtZW50X3N0YXJ0LnZlcnNpb25fZGlyZWN0aXZlICE9IE5VTEw6CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IChldmVudC5kYXRhLmRvY3VtZW50X3N0YXJ0LnZlcnNpb25fZGlyZWN0aXZlLm1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5kb2N1bWVudF9zdGFydC52ZXJzaW9uX2RpcmVjdGl2ZS5taW5vcikKKyAgICAgICAgICAgIHRhZ3MgPSBOb25lCisgICAgICAgICAgICBpZiBldmVudC5kYXRhLmRvY3VtZW50X3N0YXJ0LnRhZ19kaXJlY3RpdmVzLnN0YXJ0ICE9IE5VTEw6CisgICAgICAgICAgICAgICAgdGFncyA9IHt9CisgICAgICAgICAgICAgICAgdGFnX2RpcmVjdGl2ZSA9IGV2ZW50LmRhdGEuZG9jdW1lbnRfc3RhcnQudGFnX2RpcmVjdGl2ZXMuc3RhcnQKKyAgICAgICAgICAgICAgICB3aGlsZSB0YWdfZGlyZWN0aXZlICE9IGV2ZW50LmRhdGEuZG9jdW1lbnRfc3RhcnQudGFnX2RpcmVjdGl2ZXMuZW5kOgorICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSBQeVVuaWNvZGVfRnJvbVlhbWxTdHJpbmcodGFnX2RpcmVjdGl2ZS5oYW5kbGUpCisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyh0YWdfZGlyZWN0aXZlLnByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgdGFnc1toYW5kbGVdID0gcHJlZml4CisgICAgICAgICAgICAgICAgICAgIHRhZ19kaXJlY3RpdmUgPSB0YWdfZGlyZWN0aXZlKzEKKyAgICAgICAgICAgIHJldHVybiBEb2N1bWVudFN0YXJ0RXZlbnQoc3RhcnRfbWFyaywgZW5kX21hcmssCisgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0LCB2ZXJzaW9uLCB0YWdzKQorICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gWUFNTF9ET0NVTUVOVF9FTkRfRVZFTlQ6CisgICAgICAgICAgICBleHBsaWNpdCA9IEZhbHNlCisgICAgICAgICAgICBpZiBldmVudC5kYXRhLmRvY3VtZW50X2VuZC5pbXBsaWNpdCA9PSAwOgorICAgICAgICAgICAgICAgIGV4cGxpY2l0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIERvY3VtZW50RW5kRXZlbnQoc3RhcnRfbWFyaywgZW5kX21hcmssIGV4cGxpY2l0KQorICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gWUFNTF9BTElBU19FVkVOVDoKKyAgICAgICAgICAgIGFuY2hvciA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhldmVudC5kYXRhLmFsaWFzLmFuY2hvcikKKyAgICAgICAgICAgIHJldHVybiBBbGlhc0V2ZW50KGFuY2hvciwgc3RhcnRfbWFyaywgZW5kX21hcmspCisgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSBZQU1MX1NDQUxBUl9FVkVOVDoKKyAgICAgICAgICAgIGFuY2hvciA9IE5vbmUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEuc2NhbGFyLmFuY2hvciAhPSBOVUxMOgorICAgICAgICAgICAgICAgIGFuY2hvciA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhldmVudC5kYXRhLnNjYWxhci5hbmNob3IpCisgICAgICAgICAgICB0YWcgPSBOb25lCisgICAgICAgICAgICBpZiBldmVudC5kYXRhLnNjYWxhci50YWcgIT0gTlVMTDoKKyAgICAgICAgICAgICAgICB0YWcgPSBQeVVuaWNvZGVfRnJvbVlhbWxTdHJpbmcoZXZlbnQuZGF0YS5zY2FsYXIudGFnKQorICAgICAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCg8Y2hhciAqPmV2ZW50LmRhdGEuc2NhbGFyLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhLnNjYWxhci5sZW5ndGgsICdzdHJpY3QnKQorICAgICAgICAgICAgcGxhaW5faW1wbGljaXQgPSBGYWxzZQorICAgICAgICAgICAgaWYgZXZlbnQuZGF0YS5zY2FsYXIucGxhaW5faW1wbGljaXQgPT0gMToKKyAgICAgICAgICAgICAgICBwbGFpbl9pbXBsaWNpdCA9IFRydWUKKyAgICAgICAgICAgIHF1b3RlZF9pbXBsaWNpdCA9IEZhbHNlCisgICAgICAgICAgICBpZiBldmVudC5kYXRhLnNjYWxhci5xdW90ZWRfaW1wbGljaXQgPT0gMToKKyAgICAgICAgICAgICAgICBxdW90ZWRfaW1wbGljaXQgPSBUcnVlCisgICAgICAgICAgICBzdHlsZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEuc2NhbGFyLnN0eWxlID09IFlBTUxfUExBSU5fU0NBTEFSX1NUWUxFOgorICAgICAgICAgICAgICAgIHN0eWxlID0gdScnCisgICAgICAgICAgICBlbGlmIGV2ZW50LmRhdGEuc2NhbGFyLnN0eWxlID09IFlBTUxfU0lOR0xFX1FVT1RFRF9TQ0FMQVJfU1RZTEU6CisgICAgICAgICAgICAgICAgc3R5bGUgPSB1J1wnJworICAgICAgICAgICAgZWxpZiBldmVudC5kYXRhLnNjYWxhci5zdHlsZSA9PSBZQU1MX0RPVUJMRV9RVU9URURfU0NBTEFSX1NUWUxFOgorICAgICAgICAgICAgICAgIHN0eWxlID0gdSciJworICAgICAgICAgICAgZWxpZiBldmVudC5kYXRhLnNjYWxhci5zdHlsZSA9PSBZQU1MX0xJVEVSQUxfU0NBTEFSX1NUWUxFOgorICAgICAgICAgICAgICAgIHN0eWxlID0gdSd8JworICAgICAgICAgICAgZWxpZiBldmVudC5kYXRhLnNjYWxhci5zdHlsZSA9PSBZQU1MX0ZPTERFRF9TQ0FMQVJfU1RZTEU6CisgICAgICAgICAgICAgICAgc3R5bGUgPSB1Jz4nCisgICAgICAgICAgICByZXR1cm4gU2NhbGFyRXZlbnQoYW5jaG9yLCB0YWcsCisgICAgICAgICAgICAgICAgICAgIChwbGFpbl9pbXBsaWNpdCwgcXVvdGVkX2ltcGxpY2l0KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHN0YXJ0X21hcmssIGVuZF9tYXJrLCBzdHlsZSkKKyAgICAgICAgZWxpZiBldmVudC50eXBlID09IFlBTUxfU0VRVUVOQ0VfU1RBUlRfRVZFTlQ6CisgICAgICAgICAgICBhbmNob3IgPSBOb25lCisgICAgICAgICAgICBpZiBldmVudC5kYXRhLnNlcXVlbmNlX3N0YXJ0LmFuY2hvciAhPSBOVUxMOgorICAgICAgICAgICAgICAgIGFuY2hvciA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhldmVudC5kYXRhLnNlcXVlbmNlX3N0YXJ0LmFuY2hvcikKKyAgICAgICAgICAgIHRhZyA9IE5vbmUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEuc2VxdWVuY2Vfc3RhcnQudGFnICE9IE5VTEw6CisgICAgICAgICAgICAgICAgdGFnID0gUHlVbmljb2RlX0Zyb21ZYW1sU3RyaW5nKGV2ZW50LmRhdGEuc2VxdWVuY2Vfc3RhcnQudGFnKQorICAgICAgICAgICAgaW1wbGljaXQgPSBGYWxzZQorICAgICAgICAgICAgaWYgZXZlbnQuZGF0YS5zZXF1ZW5jZV9zdGFydC5pbXBsaWNpdCA9PSAxOgorICAgICAgICAgICAgICAgIGltcGxpY2l0ID0gVHJ1ZQorICAgICAgICAgICAgZmxvd19zdHlsZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEuc2VxdWVuY2Vfc3RhcnQuc3R5bGUgPT0gWUFNTF9GTE9XX1NFUVVFTkNFX1NUWUxFOgorICAgICAgICAgICAgICAgIGZsb3dfc3R5bGUgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGV2ZW50LmRhdGEuc2VxdWVuY2Vfc3RhcnQuc3R5bGUgPT0gWUFNTF9CTE9DS19TRVFVRU5DRV9TVFlMRToKKyAgICAgICAgICAgICAgICBmbG93X3N0eWxlID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBTZXF1ZW5jZVN0YXJ0RXZlbnQoYW5jaG9yLCB0YWcsIGltcGxpY2l0LAorICAgICAgICAgICAgICAgICAgICBzdGFydF9tYXJrLCBlbmRfbWFyaywgZmxvd19zdHlsZSkKKyAgICAgICAgZWxpZiBldmVudC50eXBlID09IFlBTUxfTUFQUElOR19TVEFSVF9FVkVOVDoKKyAgICAgICAgICAgIGFuY2hvciA9IE5vbmUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEubWFwcGluZ19zdGFydC5hbmNob3IgIT0gTlVMTDoKKyAgICAgICAgICAgICAgICBhbmNob3IgPSBQeVVuaWNvZGVfRnJvbVlhbWxTdHJpbmcoZXZlbnQuZGF0YS5tYXBwaW5nX3N0YXJ0LmFuY2hvcikKKyAgICAgICAgICAgIHRhZyA9IE5vbmUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEubWFwcGluZ19zdGFydC50YWcgIT0gTlVMTDoKKyAgICAgICAgICAgICAgICB0YWcgPSBQeVVuaWNvZGVfRnJvbVlhbWxTdHJpbmcoZXZlbnQuZGF0YS5tYXBwaW5nX3N0YXJ0LnRhZykKKyAgICAgICAgICAgIGltcGxpY2l0ID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEubWFwcGluZ19zdGFydC5pbXBsaWNpdCA9PSAxOgorICAgICAgICAgICAgICAgIGltcGxpY2l0ID0gVHJ1ZQorICAgICAgICAgICAgZmxvd19zdHlsZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGV2ZW50LmRhdGEubWFwcGluZ19zdGFydC5zdHlsZSA9PSBZQU1MX0ZMT1dfTUFQUElOR19TVFlMRToKKyAgICAgICAgICAgICAgICBmbG93X3N0eWxlID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBldmVudC5kYXRhLm1hcHBpbmdfc3RhcnQuc3R5bGUgPT0gWUFNTF9CTE9DS19NQVBQSU5HX1NUWUxFOgorICAgICAgICAgICAgICAgIGZsb3dfc3R5bGUgPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIE1hcHBpbmdTdGFydEV2ZW50KGFuY2hvciwgdGFnLCBpbXBsaWNpdCwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfbWFyaywgZW5kX21hcmssIGZsb3dfc3R5bGUpCisgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSBZQU1MX1NFUVVFTkNFX0VORF9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBTZXF1ZW5jZUVuZEV2ZW50KHN0YXJ0X21hcmssIGVuZF9tYXJrKQorICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gWUFNTF9NQVBQSU5HX0VORF9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBNYXBwaW5nRW5kRXZlbnQoc3RhcnRfbWFyaywgZW5kX21hcmspCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHUidW5rbm93biBldmVudCB0eXBlIikKKworICAgIGRlZiBnZXRfZXZlbnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9ldmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5jdXJyZW50X2V2ZW50CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZXZlbnQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX3BhcnNlKCkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgcGVla19ldmVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2V2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZXZlbnQgPSBzZWxmLl9wYXJzZSgpCisgICAgICAgIHJldHVybiBzZWxmLmN1cnJlbnRfZXZlbnQKKworICAgIGRlZiBjaGVja19ldmVudChzZWxmLCAqY2hvaWNlcyk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9ldmVudCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2V2ZW50ID0gc2VsZi5fcGFyc2UoKQorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZXZlbnQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3QgY2hvaWNlczoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV2ZW50X2NsYXNzID0gc2VsZi5jdXJyZW50X2V2ZW50Ll9fY2xhc3NfXworICAgICAgICBmb3IgY2hvaWNlIGluIGNob2ljZXM6CisgICAgICAgICAgICBpZiBldmVudF9jbGFzcyBpcyBjaG9pY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgY2hlY2tfbm9kZShzZWxmKToKKyAgICAgICAgc2VsZi5fcGFyc2VfbmV4dF9ldmVudCgpCisgICAgICAgIGlmIHNlbGYucGFyc2VkX2V2ZW50LnR5cGUgPT0gWUFNTF9TVFJFQU1fU1RBUlRfRVZFTlQ6CisgICAgICAgICAgICB5YW1sX2V2ZW50X2RlbGV0ZSgmc2VsZi5wYXJzZWRfZXZlbnQpCisgICAgICAgICAgICBzZWxmLl9wYXJzZV9uZXh0X2V2ZW50KCkKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQudHlwZSAhPSBZQU1MX1NUUkVBTV9FTkRfRVZFTlQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRfbm9kZShzZWxmKToKKyAgICAgICAgc2VsZi5fcGFyc2VfbmV4dF9ldmVudCgpCisgICAgICAgIGlmIHNlbGYucGFyc2VkX2V2ZW50LnR5cGUgIT0gWUFNTF9TVFJFQU1fRU5EX0VWRU5UOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbXBvc2VfZG9jdW1lbnQoKQorCisgICAgZGVmIGdldF9zaW5nbGVfbm9kZShzZWxmKToKKyAgICAgICAgc2VsZi5fcGFyc2VfbmV4dF9ldmVudCgpCisgICAgICAgIHlhbWxfZXZlbnRfZGVsZXRlKCZzZWxmLnBhcnNlZF9ldmVudCkKKyAgICAgICAgc2VsZi5fcGFyc2VfbmV4dF9ldmVudCgpCisgICAgICAgIGRvY3VtZW50ID0gTm9uZQorICAgICAgICBpZiBzZWxmLnBhcnNlZF9ldmVudC50eXBlICE9IFlBTUxfU1RSRUFNX0VORF9FVkVOVDoKKyAgICAgICAgICAgIGRvY3VtZW50ID0gc2VsZi5fY29tcG9zZV9kb2N1bWVudCgpCisgICAgICAgIHNlbGYuX3BhcnNlX25leHRfZXZlbnQoKQorICAgICAgICBpZiBzZWxmLnBhcnNlZF9ldmVudC50eXBlICE9IFlBTUxfU1RSRUFNX0VORF9FVkVOVDoKKyAgICAgICAgICAgIG1hcmsgPSBNYXJrKHNlbGYuc3RyZWFtX25hbWUsCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LnN0YXJ0X21hcmsuaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LnN0YXJ0X21hcmsubGluZSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5jb2x1bW4sCisgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpCisgICAgICAgICAgICByYWlzZSBDb21wb3NlckVycm9yKHUiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSIsCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnN0YXJ0X21hcmssIHUiYnV0IGZvdW5kIGFub3RoZXIgZG9jdW1lbnQiLCBtYXJrKQorICAgICAgICByZXR1cm4gZG9jdW1lbnQKKworICAgIGNkZWYgb2JqZWN0IF9jb21wb3NlX2RvY3VtZW50KHNlbGYpOgorICAgICAgICB5YW1sX2V2ZW50X2RlbGV0ZSgmc2VsZi5wYXJzZWRfZXZlbnQpCisgICAgICAgIG5vZGUgPSBzZWxmLl9jb21wb3NlX25vZGUoTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5fcGFyc2VfbmV4dF9ldmVudCgpCisgICAgICAgIHlhbWxfZXZlbnRfZGVsZXRlKCZzZWxmLnBhcnNlZF9ldmVudCkKKyAgICAgICAgc2VsZi5hbmNob3JzID0ge30KKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGNkZWYgb2JqZWN0IF9jb21wb3NlX25vZGUoc2VsZiwgb2JqZWN0IHBhcmVudCwgb2JqZWN0IGluZGV4KToKKyAgICAgICAgc2VsZi5fcGFyc2VfbmV4dF9ldmVudCgpCisgICAgICAgIGlmIHNlbGYucGFyc2VkX2V2ZW50LnR5cGUgPT0gWUFNTF9BTElBU19FVkVOVDoKKyAgICAgICAgICAgIGFuY2hvciA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhzZWxmLnBhcnNlZF9ldmVudC5kYXRhLmFsaWFzLmFuY2hvcikKKyAgICAgICAgICAgIGlmIGFuY2hvciBub3QgaW4gc2VsZi5hbmNob3JzOgorICAgICAgICAgICAgICAgIG1hcmsgPSBNYXJrKHNlbGYuc3RyZWFtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlZF9ldmVudC5zdGFydF9tYXJrLmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5jb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lKQorICAgICAgICAgICAgICAgIHJhaXNlIENvbXBvc2VyRXJyb3IoTm9uZSwgTm9uZSwgdSJmb3VuZCB1bmRlZmluZWQgYWxpYXMiLCBtYXJrKQorICAgICAgICAgICAgeWFtbF9ldmVudF9kZWxldGUoJnNlbGYucGFyc2VkX2V2ZW50KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYW5jaG9yc1thbmNob3JdCisgICAgICAgIGFuY2hvciA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQudHlwZSA9PSBZQU1MX1NDQUxBUl9FVkVOVCAgXAorICAgICAgICAgICAgICAgIGFuZCBzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNjYWxhci5hbmNob3IgIT0gTlVMTDoKKyAgICAgICAgICAgIGFuY2hvciA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNjYWxhci5hbmNob3IpCisgICAgICAgIGVsaWYgc2VsZi5wYXJzZWRfZXZlbnQudHlwZSA9PSBZQU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5UICAgIFwKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5zZXF1ZW5jZV9zdGFydC5hbmNob3IgIT0gTlVMTDoKKyAgICAgICAgICAgIGFuY2hvciA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNlcXVlbmNlX3N0YXJ0LmFuY2hvcikKKyAgICAgICAgZWxpZiBzZWxmLnBhcnNlZF9ldmVudC50eXBlID09IFlBTUxfTUFQUElOR19TVEFSVF9FVkVOVCAgICBcCisgICAgICAgICAgICAgICAgYW5kIHNlbGYucGFyc2VkX2V2ZW50LmRhdGEubWFwcGluZ19zdGFydC5hbmNob3IgIT0gTlVMTDoKKyAgICAgICAgICAgIGFuY2hvciA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhzZWxmLnBhcnNlZF9ldmVudC5kYXRhLm1hcHBpbmdfc3RhcnQuYW5jaG9yKQorICAgICAgICBpZiBhbmNob3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBhbmNob3IgaW4gc2VsZi5hbmNob3JzOgorICAgICAgICAgICAgICAgIG1hcmsgPSBNYXJrKHNlbGYuc3RyZWFtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlZF9ldmVudC5zdGFydF9tYXJrLmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5jb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lKQorICAgICAgICAgICAgICAgIHJhaXNlIENvbXBvc2VyRXJyb3IodSJmb3VuZCBkdXBsaWNhdGUgYW5jaG9yOyBmaXJzdCBvY2N1cnJlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW5jaG9yc1thbmNob3JdLnN0YXJ0X21hcmssIHUic2Vjb25kIG9jY3VycmVuY2UiLCBtYXJrKQorICAgICAgICBzZWxmLmRlc2NlbmRfcmVzb2x2ZXIocGFyZW50LCBpbmRleCkKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQudHlwZSA9PSBZQU1MX1NDQUxBUl9FVkVOVDoKKyAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9jb21wb3NlX3NjYWxhcl9ub2RlKGFuY2hvcikKKyAgICAgICAgZWxpZiBzZWxmLnBhcnNlZF9ldmVudC50eXBlID09IFlBTUxfU0VRVUVOQ0VfU1RBUlRfRVZFTlQ6CisgICAgICAgICAgICBub2RlID0gc2VsZi5fY29tcG9zZV9zZXF1ZW5jZV9ub2RlKGFuY2hvcikKKyAgICAgICAgZWxpZiBzZWxmLnBhcnNlZF9ldmVudC50eXBlID09IFlBTUxfTUFQUElOR19TVEFSVF9FVkVOVDoKKyAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9jb21wb3NlX21hcHBpbmdfbm9kZShhbmNob3IpCisgICAgICAgIHNlbGYuYXNjZW5kX3Jlc29sdmVyKCkKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGNkZWYgX2NvbXBvc2Vfc2NhbGFyX25vZGUoc2VsZiwgb2JqZWN0IGFuY2hvcik6CisgICAgICAgIHN0YXJ0X21hcmsgPSBNYXJrKHNlbGYuc3RyZWFtX25hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5pbmRleCwKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlZF9ldmVudC5zdGFydF9tYXJrLmxpbmUsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5jb2x1bW4sCisgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSkKKyAgICAgICAgZW5kX21hcmsgPSBNYXJrKHNlbGYuc3RyZWFtX25hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuZW5kX21hcmsuaW5kZXgsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuZW5kX21hcmsubGluZSwKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlZF9ldmVudC5lbmRfbWFyay5jb2x1bW4sCisgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSkKKyAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCg8Y2hhciAqPnNlbGYucGFyc2VkX2V2ZW50LmRhdGEuc2NhbGFyLnZhbHVlLAorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LmRhdGEuc2NhbGFyLmxlbmd0aCwgJ3N0cmljdCcpCisgICAgICAgIHBsYWluX2ltcGxpY2l0ID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5zY2FsYXIucGxhaW5faW1wbGljaXQgPT0gMToKKyAgICAgICAgICAgIHBsYWluX2ltcGxpY2l0ID0gVHJ1ZQorICAgICAgICBxdW90ZWRfaW1wbGljaXQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNjYWxhci5xdW90ZWRfaW1wbGljaXQgPT0gMToKKyAgICAgICAgICAgIHF1b3RlZF9pbXBsaWNpdCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5zY2FsYXIudGFnID09IE5VTEwgICAgXAorICAgICAgICAgICAgICAgIG9yIChzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNjYWxhci50YWdbMF0gPT0gYychJworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYucGFyc2VkX2V2ZW50LmRhdGEuc2NhbGFyLnRhZ1sxXSA9PSBjJ1wwJyk6CisgICAgICAgICAgICB0YWcgPSBzZWxmLnJlc29sdmUoU2NhbGFyTm9kZSwgdmFsdWUsIChwbGFpbl9pbXBsaWNpdCwgcXVvdGVkX2ltcGxpY2l0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhZyA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNjYWxhci50YWcpCisgICAgICAgIHN0eWxlID0gTm9uZQorICAgICAgICBpZiBzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNjYWxhci5zdHlsZSA9PSBZQU1MX1BMQUlOX1NDQUxBUl9TVFlMRToKKyAgICAgICAgICAgIHN0eWxlID0gdScnCisgICAgICAgIGVsaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5zY2FsYXIuc3R5bGUgPT0gWUFNTF9TSU5HTEVfUVVPVEVEX1NDQUxBUl9TVFlMRToKKyAgICAgICAgICAgIHN0eWxlID0gdSdcJycKKyAgICAgICAgZWxpZiBzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNjYWxhci5zdHlsZSA9PSBZQU1MX0RPVUJMRV9RVU9URURfU0NBTEFSX1NUWUxFOgorICAgICAgICAgICAgc3R5bGUgPSB1JyInCisgICAgICAgIGVsaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5zY2FsYXIuc3R5bGUgPT0gWUFNTF9MSVRFUkFMX1NDQUxBUl9TVFlMRToKKyAgICAgICAgICAgIHN0eWxlID0gdSd8JworICAgICAgICBlbGlmIHNlbGYucGFyc2VkX2V2ZW50LmRhdGEuc2NhbGFyLnN0eWxlID09IFlBTUxfRk9MREVEX1NDQUxBUl9TVFlMRToKKyAgICAgICAgICAgIHN0eWxlID0gdSc+JworICAgICAgICBub2RlID0gU2NhbGFyTm9kZSh0YWcsIHZhbHVlLCBzdGFydF9tYXJrLCBlbmRfbWFyaywgc3R5bGUpCisgICAgICAgIGlmIGFuY2hvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYW5jaG9yc1thbmNob3JdID0gbm9kZQorICAgICAgICB5YW1sX2V2ZW50X2RlbGV0ZSgmc2VsZi5wYXJzZWRfZXZlbnQpCisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBjZGVmIF9jb21wb3NlX3NlcXVlbmNlX25vZGUoc2VsZiwgb2JqZWN0IGFuY2hvcik6CisgICAgICAgIGNkZWYgaW50IGluZGV4CisgICAgICAgIHN0YXJ0X21hcmsgPSBNYXJrKHNlbGYuc3RyZWFtX25hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5pbmRleCwKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlZF9ldmVudC5zdGFydF9tYXJrLmxpbmUsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5jb2x1bW4sCisgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSkKKyAgICAgICAgaW1wbGljaXQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNlcXVlbmNlX3N0YXJ0LmltcGxpY2l0ID09IDE6CisgICAgICAgICAgICBpbXBsaWNpdCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5zZXF1ZW5jZV9zdGFydC50YWcgPT0gTlVMTCAgICBcCisgICAgICAgICAgICAgICAgb3IgKHNlbGYucGFyc2VkX2V2ZW50LmRhdGEuc2VxdWVuY2Vfc3RhcnQudGFnWzBdID09IGMnIScKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNlcXVlbmNlX3N0YXJ0LnRhZ1sxXSA9PSBjJ1wwJyk6CisgICAgICAgICAgICB0YWcgPSBzZWxmLnJlc29sdmUoU2VxdWVuY2VOb2RlLCBOb25lLCBpbXBsaWNpdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhZyA9IFB5VW5pY29kZV9Gcm9tWWFtbFN0cmluZyhzZWxmLnBhcnNlZF9ldmVudC5kYXRhLnNlcXVlbmNlX3N0YXJ0LnRhZykKKyAgICAgICAgZmxvd19zdHlsZSA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5zZXF1ZW5jZV9zdGFydC5zdHlsZSA9PSBZQU1MX0ZMT1dfU0VRVUVOQ0VfU1RZTEU6CisgICAgICAgICAgICBmbG93X3N0eWxlID0gVHJ1ZQorICAgICAgICBlbGlmIHNlbGYucGFyc2VkX2V2ZW50LmRhdGEuc2VxdWVuY2Vfc3RhcnQuc3R5bGUgPT0gWUFNTF9CTE9DS19TRVFVRU5DRV9TVFlMRToKKyAgICAgICAgICAgIGZsb3dfc3R5bGUgPSBGYWxzZQorICAgICAgICB2YWx1ZSA9IFtdCisgICAgICAgIG5vZGUgPSBTZXF1ZW5jZU5vZGUodGFnLCB2YWx1ZSwgc3RhcnRfbWFyaywgTm9uZSwgZmxvd19zdHlsZSkKKyAgICAgICAgaWYgYW5jaG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hbmNob3JzW2FuY2hvcl0gPSBub2RlCisgICAgICAgIHlhbWxfZXZlbnRfZGVsZXRlKCZzZWxmLnBhcnNlZF9ldmVudCkKKyAgICAgICAgaW5kZXggPSAwCisgICAgICAgIHNlbGYuX3BhcnNlX25leHRfZXZlbnQoKQorICAgICAgICB3aGlsZSBzZWxmLnBhcnNlZF9ldmVudC50eXBlICE9IFlBTUxfU0VRVUVOQ0VfRU5EX0VWRU5UOgorICAgICAgICAgICAgdmFsdWUuYXBwZW5kKHNlbGYuX2NvbXBvc2Vfbm9kZShub2RlLCBpbmRleCkpCisgICAgICAgICAgICBpbmRleCA9IGluZGV4KzEKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlX25leHRfZXZlbnQoKQorICAgICAgICBub2RlLmVuZF9tYXJrID0gTWFyayhzZWxmLnN0cmVhbV9uYW1lLAorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LmVuZF9tYXJrLmluZGV4LAorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LmVuZF9tYXJrLmxpbmUsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuZW5kX21hcmsuY29sdW1uLAorICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpCisgICAgICAgIHlhbWxfZXZlbnRfZGVsZXRlKCZzZWxmLnBhcnNlZF9ldmVudCkKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGNkZWYgX2NvbXBvc2VfbWFwcGluZ19ub2RlKHNlbGYsIG9iamVjdCBhbmNob3IpOgorICAgICAgICBzdGFydF9tYXJrID0gTWFyayhzZWxmLnN0cmVhbV9uYW1lLAorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LnN0YXJ0X21hcmsuaW5kZXgsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuc3RhcnRfbWFyay5saW5lLAorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LnN0YXJ0X21hcmsuY29sdW1uLAorICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpCisgICAgICAgIGltcGxpY2l0ID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5tYXBwaW5nX3N0YXJ0LmltcGxpY2l0ID09IDE6CisgICAgICAgICAgICBpbXBsaWNpdCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5tYXBwaW5nX3N0YXJ0LnRhZyA9PSBOVUxMICAgIFwKKyAgICAgICAgICAgICAgICBvciAoc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5tYXBwaW5nX3N0YXJ0LnRhZ1swXSA9PSBjJyEnCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5tYXBwaW5nX3N0YXJ0LnRhZ1sxXSA9PSBjJ1wwJyk6CisgICAgICAgICAgICB0YWcgPSBzZWxmLnJlc29sdmUoTWFwcGluZ05vZGUsIE5vbmUsIGltcGxpY2l0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFnID0gUHlVbmljb2RlX0Zyb21ZYW1sU3RyaW5nKHNlbGYucGFyc2VkX2V2ZW50LmRhdGEubWFwcGluZ19zdGFydC50YWcpCisgICAgICAgIGZsb3dfc3R5bGUgPSBOb25lCisgICAgICAgIGlmIHNlbGYucGFyc2VkX2V2ZW50LmRhdGEubWFwcGluZ19zdGFydC5zdHlsZSA9PSBZQU1MX0ZMT1dfTUFQUElOR19TVFlMRToKKyAgICAgICAgICAgIGZsb3dfc3R5bGUgPSBUcnVlCisgICAgICAgIGVsaWYgc2VsZi5wYXJzZWRfZXZlbnQuZGF0YS5tYXBwaW5nX3N0YXJ0LnN0eWxlID09IFlBTUxfQkxPQ0tfTUFQUElOR19TVFlMRToKKyAgICAgICAgICAgIGZsb3dfc3R5bGUgPSBGYWxzZQorICAgICAgICB2YWx1ZSA9IFtdCisgICAgICAgIG5vZGUgPSBNYXBwaW5nTm9kZSh0YWcsIHZhbHVlLCBzdGFydF9tYXJrLCBOb25lLCBmbG93X3N0eWxlKQorICAgICAgICBpZiBhbmNob3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFuY2hvcnNbYW5jaG9yXSA9IG5vZGUKKyAgICAgICAgeWFtbF9ldmVudF9kZWxldGUoJnNlbGYucGFyc2VkX2V2ZW50KQorICAgICAgICBzZWxmLl9wYXJzZV9uZXh0X2V2ZW50KCkKKyAgICAgICAgd2hpbGUgc2VsZi5wYXJzZWRfZXZlbnQudHlwZSAhPSBZQU1MX01BUFBJTkdfRU5EX0VWRU5UOgorICAgICAgICAgICAgaXRlbV9rZXkgPSBzZWxmLl9jb21wb3NlX25vZGUobm9kZSwgTm9uZSkKKyAgICAgICAgICAgIGl0ZW1fdmFsdWUgPSBzZWxmLl9jb21wb3NlX25vZGUobm9kZSwgaXRlbV9rZXkpCisgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoKGl0ZW1fa2V5LCBpdGVtX3ZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlX25leHRfZXZlbnQoKQorICAgICAgICBub2RlLmVuZF9tYXJrID0gTWFyayhzZWxmLnN0cmVhbV9uYW1lLAorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LmVuZF9tYXJrLmluZGV4LAorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VkX2V2ZW50LmVuZF9tYXJrLmxpbmUsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZWRfZXZlbnQuZW5kX21hcmsuY29sdW1uLAorICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpCisgICAgICAgIHlhbWxfZXZlbnRfZGVsZXRlKCZzZWxmLnBhcnNlZF9ldmVudCkKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGNkZWYgaW50IF9wYXJzZV9uZXh0X2V2ZW50KHNlbGYpIGV4Y2VwdCAwOgorICAgICAgICBpZiBzZWxmLnBhcnNlZF9ldmVudC50eXBlID09IFlBTUxfTk9fRVZFTlQ6CisgICAgICAgICAgICBpZiB5YW1sX3BhcnNlcl9wYXJzZSgmc2VsZi5wYXJzZXIsICZzZWxmLnBhcnNlZF9ldmVudCkgPT0gMDoKKyAgICAgICAgICAgICAgICBlcnJvciA9IHNlbGYuX3BhcnNlcl9lcnJvcigpCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IKKyAgICAgICAgcmV0dXJuIDEKKworY2RlZiBpbnQgaW5wdXRfaGFuZGxlcih2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3QgKnJlYWQpIGV4Y2VwdCAwOgorICAgIGNkZWYgQ1BhcnNlciBwYXJzZXIKKyAgICBwYXJzZXIgPSA8Q1BhcnNlcj5kYXRhCisgICAgaWYgcGFyc2VyLnN0cmVhbV9jYWNoZSBpcyBOb25lOgorICAgICAgICB2YWx1ZSA9IHBhcnNlci5zdHJlYW0ucmVhZChzaXplKQorICAgICAgICBpZiBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2YWx1ZSkgIT0gMDoKKyAgICAgICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZyh2YWx1ZSkKKyAgICAgICAgICAgIHBhcnNlci51bmljb2RlX3NvdXJjZSA9IDEKKyAgICAgICAgaWYgUHlCeXRlc19DaGVja0V4YWN0KHZhbHVlKSA9PSAwOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHUiYSBzdHJpbmcgdmFsdWUgaXMgZXhwZWN0ZWQiKQorICAgICAgICBwYXJzZXIuc3RyZWFtX2NhY2hlID0gdmFsdWUKKyAgICAgICAgcGFyc2VyLnN0cmVhbV9jYWNoZV9wb3MgPSAwCisgICAgICAgIHBhcnNlci5zdHJlYW1fY2FjaGVfbGVuID0gUHlCeXRlc19HRVRfU0laRSh2YWx1ZSkKKyAgICBpZiAocGFyc2VyLnN0cmVhbV9jYWNoZV9sZW4gLSBwYXJzZXIuc3RyZWFtX2NhY2hlX3BvcykgPCA8aW50PnNpemU6CisgICAgICAgIHNpemUgPSBwYXJzZXIuc3RyZWFtX2NhY2hlX2xlbiAtIHBhcnNlci5zdHJlYW1fY2FjaGVfcG9zCisgICAgaWYgc2l6ZSA+IDA6CisgICAgICAgIG1lbWNweShidWZmZXIsIFB5Qnl0ZXNfQVNfU1RSSU5HKHBhcnNlci5zdHJlYW1fY2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwYXJzZXIuc3RyZWFtX2NhY2hlX3Bvcywgc2l6ZSkKKyAgICByZWFkWzBdID0gc2l6ZQorICAgIHBhcnNlci5zdHJlYW1fY2FjaGVfcG9zICs9IHNpemUKKyAgICBpZiBwYXJzZXIuc3RyZWFtX2NhY2hlX3BvcyA9PSBwYXJzZXIuc3RyZWFtX2NhY2hlX2xlbjoKKyAgICAgICAgcGFyc2VyLnN0cmVhbV9jYWNoZSA9IE5vbmUKKyAgICByZXR1cm4gMQorCitjZGVmIGNsYXNzIENFbWl0dGVyOgorCisgICAgY2RlZiB5YW1sX2VtaXR0ZXJfdCBlbWl0dGVyCisKKyAgICBjZGVmIG9iamVjdCBzdHJlYW0KKworICAgIGNkZWYgaW50IGRvY3VtZW50X3N0YXJ0X2ltcGxpY2l0CisgICAgY2RlZiBpbnQgZG9jdW1lbnRfZW5kX2ltcGxpY2l0CisgICAgY2RlZiBvYmplY3QgdXNlX3ZlcnNpb24KKyAgICBjZGVmIG9iamVjdCB1c2VfdGFncworCisgICAgY2RlZiBvYmplY3Qgc2VyaWFsaXplZF9ub2RlcworICAgIGNkZWYgb2JqZWN0IGFuY2hvcnMKKyAgICBjZGVmIGludCBsYXN0X2FsaWFzX2lkCisgICAgY2RlZiBpbnQgY2xvc2VkCisgICAgY2RlZiBpbnQgZHVtcF91bmljb2RlCisgICAgY2RlZiBvYmplY3QgdXNlX2VuY29kaW5nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLCBjYW5vbmljYWw9Tm9uZSwgaW5kZW50PU5vbmUsIHdpZHRoPU5vbmUsCisgICAgICAgICAgICBhbGxvd191bmljb2RlPU5vbmUsIGxpbmVfYnJlYWs9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgIGV4cGxpY2l0X3N0YXJ0PU5vbmUsIGV4cGxpY2l0X2VuZD1Ob25lLCB2ZXJzaW9uPU5vbmUsIHRhZ3M9Tm9uZSk6CisgICAgICAgIGlmIHlhbWxfZW1pdHRlcl9pbml0aWFsaXplKCZzZWxmLmVtaXR0ZXIpID09IDA6CisgICAgICAgICAgICByYWlzZSBNZW1vcnlFcnJvcgorICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQorICAgICAgICBzZWxmLmR1bXBfdW5pY29kZSA9IDAKKyAgICAgICAgaWYgaGFzYXR0cihzdHJlYW0sIHUnZW5jb2RpbmcnKToKKyAgICAgICAgICAgIHNlbGYuZHVtcF91bmljb2RlID0gMQorICAgICAgICBzZWxmLnVzZV9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgICAgIHlhbWxfZW1pdHRlcl9zZXRfb3V0cHV0KCZzZWxmLmVtaXR0ZXIsIG91dHB1dF9oYW5kbGVyLCA8dm9pZCAqPnNlbGYpICAgIAorICAgICAgICBpZiBjYW5vbmljYWw6CisgICAgICAgICAgICB5YW1sX2VtaXR0ZXJfc2V0X2Nhbm9uaWNhbCgmc2VsZi5lbWl0dGVyLCAxKQorICAgICAgICBpZiBpbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5YW1sX2VtaXR0ZXJfc2V0X2luZGVudCgmc2VsZi5lbWl0dGVyLCBpbmRlbnQpCisgICAgICAgIGlmIHdpZHRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWFtbF9lbWl0dGVyX3NldF93aWR0aCgmc2VsZi5lbWl0dGVyLCB3aWR0aCkKKyAgICAgICAgaWYgYWxsb3dfdW5pY29kZToKKyAgICAgICAgICAgIHlhbWxfZW1pdHRlcl9zZXRfdW5pY29kZSgmc2VsZi5lbWl0dGVyLCAxKQorICAgICAgICBpZiBsaW5lX2JyZWFrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbGluZV9icmVhayA9PSAnXHInOgorICAgICAgICAgICAgICAgIHlhbWxfZW1pdHRlcl9zZXRfYnJlYWsoJnNlbGYuZW1pdHRlciwgWUFNTF9DUl9CUkVBSykKKyAgICAgICAgICAgIGVsaWYgbGluZV9icmVhayA9PSAnXG4nOgorICAgICAgICAgICAgICAgIHlhbWxfZW1pdHRlcl9zZXRfYnJlYWsoJnNlbGYuZW1pdHRlciwgWUFNTF9MTl9CUkVBSykKKyAgICAgICAgICAgIGVsaWYgbGluZV9icmVhayA9PSAnXHJcbic6CisgICAgICAgICAgICAgICAgeWFtbF9lbWl0dGVyX3NldF9icmVhaygmc2VsZi5lbWl0dGVyLCBZQU1MX0NSTE5fQlJFQUspCisgICAgICAgIHNlbGYuZG9jdW1lbnRfc3RhcnRfaW1wbGljaXQgPSAxCisgICAgICAgIGlmIGV4cGxpY2l0X3N0YXJ0OgorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9zdGFydF9pbXBsaWNpdCA9IDAKKyAgICAgICAgc2VsZi5kb2N1bWVudF9lbmRfaW1wbGljaXQgPSAxCisgICAgICAgIGlmIGV4cGxpY2l0X2VuZDoKKyAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZW5kX2ltcGxpY2l0ID0gMAorICAgICAgICBzZWxmLnVzZV92ZXJzaW9uID0gdmVyc2lvbgorICAgICAgICBzZWxmLnVzZV90YWdzID0gdGFncworICAgICAgICBzZWxmLnNlcmlhbGl6ZWRfbm9kZXMgPSB7fQorICAgICAgICBzZWxmLmFuY2hvcnMgPSB7fQorICAgICAgICBzZWxmLmxhc3RfYWxpYXNfaWQgPSAwCisgICAgICAgIHNlbGYuY2xvc2VkID0gLTEKKworICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKyAgICAgICAgeWFtbF9lbWl0dGVyX2RlbGV0ZSgmc2VsZi5lbWl0dGVyKQorCisgICAgZGVmIGRpc3Bvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGNkZWYgb2JqZWN0IF9lbWl0dGVyX2Vycm9yKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmVtaXR0ZXIuZXJyb3IgPT0gWUFNTF9NRU1PUllfRVJST1I6CisgICAgICAgICAgICByZXR1cm4gTWVtb3J5RXJyb3IKKyAgICAgICAgZWxpZiBzZWxmLmVtaXR0ZXIuZXJyb3IgPT0gWUFNTF9FTUlUVEVSX0VSUk9SOgorICAgICAgICAgICAgcHJvYmxlbSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHNlbGYuZW1pdHRlci5wcm9ibGVtKQorICAgICAgICAgICAgcmV0dXJuIEVtaXR0ZXJFcnJvcihwcm9ibGVtKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHUibm8gZW1pdHRlciBlcnJvciIpCisKKyAgICBjZGVmIGludCBfb2JqZWN0X3RvX2V2ZW50KHNlbGYsIG9iamVjdCBldmVudF9vYmplY3QsIHlhbWxfZXZlbnRfdCAqZXZlbnQpIGV4Y2VwdCAwOgorICAgICAgICBjZGVmIHlhbWxfZW5jb2RpbmdfdCBlbmNvZGluZworICAgICAgICBjZGVmIHlhbWxfdmVyc2lvbl9kaXJlY3RpdmVfdCB2ZXJzaW9uX2RpcmVjdGl2ZV92YWx1ZQorICAgICAgICBjZGVmIHlhbWxfdmVyc2lvbl9kaXJlY3RpdmVfdCAqdmVyc2lvbl9kaXJlY3RpdmUKKyAgICAgICAgY2RlZiB5YW1sX3RhZ19kaXJlY3RpdmVfdCB0YWdfZGlyZWN0aXZlc192YWx1ZVsxMjhdCisgICAgICAgIGNkZWYgeWFtbF90YWdfZGlyZWN0aXZlX3QgKnRhZ19kaXJlY3RpdmVzX3N0YXJ0CisgICAgICAgIGNkZWYgeWFtbF90YWdfZGlyZWN0aXZlX3QgKnRhZ19kaXJlY3RpdmVzX2VuZAorICAgICAgICBjZGVmIGludCBpbXBsaWNpdAorICAgICAgICBjZGVmIGludCBwbGFpbl9pbXBsaWNpdAorICAgICAgICBjZGVmIGludCBxdW90ZWRfaW1wbGljaXQKKyAgICAgICAgY2RlZiB5YW1sX2NoYXJfdCAqYW5jaG9yCisgICAgICAgIGNkZWYgeWFtbF9jaGFyX3QgKnRhZworICAgICAgICBjZGVmIHlhbWxfY2hhcl90ICp2YWx1ZQorICAgICAgICBjZGVmIGludCBsZW5ndGgKKyAgICAgICAgY2RlZiB5YW1sX3NjYWxhcl9zdHlsZV90IHNjYWxhcl9zdHlsZQorICAgICAgICBjZGVmIHlhbWxfc2VxdWVuY2Vfc3R5bGVfdCBzZXF1ZW5jZV9zdHlsZQorICAgICAgICBjZGVmIHlhbWxfbWFwcGluZ19zdHlsZV90IG1hcHBpbmdfc3R5bGUKKyAgICAgICAgZXZlbnRfY2xhc3MgPSBldmVudF9vYmplY3QuX19jbGFzc19fCisgICAgICAgIGlmIGV2ZW50X2NsYXNzIGlzIFN0cmVhbVN0YXJ0RXZlbnQ6CisgICAgICAgICAgICBlbmNvZGluZyA9IFlBTUxfVVRGOF9FTkNPRElORworICAgICAgICAgICAgaWYgZXZlbnRfb2JqZWN0LmVuY29kaW5nID09IHUndXRmLTE2LWxlJyBvciBldmVudF9vYmplY3QuZW5jb2RpbmcgPT0gJ3V0Zi0xNi1sZSc6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBZQU1MX1VURjE2TEVfRU5DT0RJTkcKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfb2JqZWN0LmVuY29kaW5nID09IHUndXRmLTE2LWJlJyBvciBldmVudF9vYmplY3QuZW5jb2RpbmcgPT0gJ3V0Zi0xNi1iZSc6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBZQU1MX1VURjE2QkVfRU5DT0RJTkcKKyAgICAgICAgICAgIGlmIGV2ZW50X29iamVjdC5lbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuZHVtcF91bmljb2RlID0gMQorICAgICAgICAgICAgaWYgc2VsZi5kdW1wX3VuaWNvZGUgPT0gMToKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFlBTUxfVVRGOF9FTkNPRElORworICAgICAgICAgICAgeWFtbF9zdHJlYW1fc3RhcnRfZXZlbnRfaW5pdGlhbGl6ZShldmVudCwgZW5jb2RpbmcpCisgICAgICAgIGVsaWYgZXZlbnRfY2xhc3MgaXMgU3RyZWFtRW5kRXZlbnQ6CisgICAgICAgICAgICB5YW1sX3N0cmVhbV9lbmRfZXZlbnRfaW5pdGlhbGl6ZShldmVudCkKKyAgICAgICAgZWxpZiBldmVudF9jbGFzcyBpcyBEb2N1bWVudFN0YXJ0RXZlbnQ6CisgICAgICAgICAgICB2ZXJzaW9uX2RpcmVjdGl2ZSA9IE5VTEwKKyAgICAgICAgICAgIGlmIGV2ZW50X29iamVjdC52ZXJzaW9uOgorICAgICAgICAgICAgICAgIHZlcnNpb25fZGlyZWN0aXZlX3ZhbHVlLm1ham9yID0gZXZlbnRfb2JqZWN0LnZlcnNpb25bMF0KKyAgICAgICAgICAgICAgICB2ZXJzaW9uX2RpcmVjdGl2ZV92YWx1ZS5taW5vciA9IGV2ZW50X29iamVjdC52ZXJzaW9uWzFdCisgICAgICAgICAgICAgICAgdmVyc2lvbl9kaXJlY3RpdmUgPSAmdmVyc2lvbl9kaXJlY3RpdmVfdmFsdWUKKyAgICAgICAgICAgIHRhZ19kaXJlY3RpdmVzX3N0YXJ0ID0gTlVMTAorICAgICAgICAgICAgdGFnX2RpcmVjdGl2ZXNfZW5kID0gTlVMTAorICAgICAgICAgICAgaWYgZXZlbnRfb2JqZWN0LnRhZ3M6CisgICAgICAgICAgICAgICAgaWYgbGVuKGV2ZW50X29iamVjdC50YWdzKSA+IDEyODoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih1InRvbyBtYW55IHRhZ3MiKQorICAgICAgICAgICAgICAgIHRhZ19kaXJlY3RpdmVzX3N0YXJ0ID0gdGFnX2RpcmVjdGl2ZXNfdmFsdWUKKyAgICAgICAgICAgICAgICB0YWdfZGlyZWN0aXZlc19lbmQgPSB0YWdfZGlyZWN0aXZlc192YWx1ZQorICAgICAgICAgICAgICAgIGNhY2hlID0gW10KKyAgICAgICAgICAgICAgICBmb3IgaGFuZGxlIGluIGV2ZW50X29iamVjdC50YWdzOgorICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBldmVudF9vYmplY3QudGFnc1toYW5kbGVdCisgICAgICAgICAgICAgICAgICAgIGlmIFB5VW5pY29kZV9DaGVja0V4YWN0KGhhbmRsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKGhhbmRsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmFwcGVuZChoYW5kbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBQeUJ5dGVzX0NoZWNrRXhhY3QoaGFuZGxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcih1InRhZyBoYW5kbGUgbXVzdCBiZSBhIHN0cmluZyIpCisgICAgICAgICAgICAgICAgICAgIHRhZ19kaXJlY3RpdmVzX2VuZC5oYW5kbGUgPSBQeUJ5dGVzX0FTX1lhbWxfU1RSSU5HKGhhbmRsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgUHlVbmljb2RlX0NoZWNrRXhhY3QocHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcocHJlZml4KQorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuYXBwZW5kKHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IFB5Qnl0ZXNfQ2hlY2tFeGFjdChwcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHUidGFnIHByZWZpeCBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICAgICAgdGFnX2RpcmVjdGl2ZXNfZW5kLnByZWZpeCA9IFB5Qnl0ZXNfQVNfWWFtbF9TVFJJTkcocHJlZml4KQorICAgICAgICAgICAgICAgICAgICB0YWdfZGlyZWN0aXZlc19lbmQgPSB0YWdfZGlyZWN0aXZlc19lbmQrMQorICAgICAgICAgICAgaW1wbGljaXQgPSAxCisgICAgICAgICAgICBpZiBldmVudF9vYmplY3QuZXhwbGljaXQ6CisgICAgICAgICAgICAgICAgaW1wbGljaXQgPSAwCisgICAgICAgICAgICBpZiB5YW1sX2RvY3VtZW50X3N0YXJ0X2V2ZW50X2luaXRpYWxpemUoZXZlbnQsIHZlcnNpb25fZGlyZWN0aXZlLAorICAgICAgICAgICAgICAgICAgICB0YWdfZGlyZWN0aXZlc19zdGFydCwgdGFnX2RpcmVjdGl2ZXNfZW5kLCBpbXBsaWNpdCkgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBNZW1vcnlFcnJvcgorICAgICAgICBlbGlmIGV2ZW50X2NsYXNzIGlzIERvY3VtZW50RW5kRXZlbnQ6CisgICAgICAgICAgICBpbXBsaWNpdCA9IDEKKyAgICAgICAgICAgIGlmIGV2ZW50X29iamVjdC5leHBsaWNpdDoKKyAgICAgICAgICAgICAgICBpbXBsaWNpdCA9IDAKKyAgICAgICAgICAgIHlhbWxfZG9jdW1lbnRfZW5kX2V2ZW50X2luaXRpYWxpemUoZXZlbnQsIGltcGxpY2l0KQorICAgICAgICBlbGlmIGV2ZW50X2NsYXNzIGlzIEFsaWFzRXZlbnQ6CisgICAgICAgICAgICBhbmNob3IgPSBOVUxMCisgICAgICAgICAgICBhbmNob3Jfb2JqZWN0ID0gZXZlbnRfb2JqZWN0LmFuY2hvcgorICAgICAgICAgICAgaWYgUHlVbmljb2RlX0NoZWNrRXhhY3QoYW5jaG9yX29iamVjdCk6CisgICAgICAgICAgICAgICAgYW5jaG9yX29iamVjdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoYW5jaG9yX29iamVjdCkKKyAgICAgICAgICAgIGlmIG5vdCBQeUJ5dGVzX0NoZWNrRXhhY3QoYW5jaG9yX29iamVjdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHUiYW5jaG9yIG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICAgICAgYW5jaG9yID0gUHlCeXRlc19BU19ZYW1sX1NUUklORyhhbmNob3Jfb2JqZWN0KQorICAgICAgICAgICAgaWYgeWFtbF9hbGlhc19ldmVudF9pbml0aWFsaXplKGV2ZW50LCBhbmNob3IpID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgTWVtb3J5RXJyb3IKKyAgICAgICAgZWxpZiBldmVudF9jbGFzcyBpcyBTY2FsYXJFdmVudDoKKyAgICAgICAgICAgIGFuY2hvciA9IE5VTEwKKyAgICAgICAgICAgIGFuY2hvcl9vYmplY3QgPSBldmVudF9vYmplY3QuYW5jaG9yCisgICAgICAgICAgICBpZiBhbmNob3Jfb2JqZWN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIFB5VW5pY29kZV9DaGVja0V4YWN0KGFuY2hvcl9vYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBhbmNob3Jfb2JqZWN0ID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZyhhbmNob3Jfb2JqZWN0KQorICAgICAgICAgICAgICAgIGlmIG5vdCBQeUJ5dGVzX0NoZWNrRXhhY3QoYW5jaG9yX29iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcih1ImFuY2hvciBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICBhbmNob3IgPSBQeUJ5dGVzX0FTX1lhbWxfU1RSSU5HKGFuY2hvcl9vYmplY3QpCisgICAgICAgICAgICB0YWcgPSBOVUxMCisgICAgICAgICAgICB0YWdfb2JqZWN0ID0gZXZlbnRfb2JqZWN0LnRhZworICAgICAgICAgICAgaWYgdGFnX29iamVjdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh0YWdfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgdGFnX29iamVjdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcodGFnX29iamVjdCkKKyAgICAgICAgICAgICAgICBpZiBub3QgUHlCeXRlc19DaGVja0V4YWN0KHRhZ19vYmplY3QpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IodSJ0YWcgbXVzdCBiZSBhIHN0cmluZyIpCisgICAgICAgICAgICAgICAgdGFnID0gUHlCeXRlc19BU19ZYW1sX1NUUklORyh0YWdfb2JqZWN0KQorICAgICAgICAgICAgdmFsdWVfb2JqZWN0ID0gZXZlbnRfb2JqZWN0LnZhbHVlCisgICAgICAgICAgICBpZiBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2YWx1ZV9vYmplY3QpOgorICAgICAgICAgICAgICAgIHZhbHVlX29iamVjdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcodmFsdWVfb2JqZWN0KQorICAgICAgICAgICAgaWYgbm90IFB5Qnl0ZXNfQ2hlY2tFeGFjdCh2YWx1ZV9vYmplY3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcih1InZhbHVlIG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICAgICAgdmFsdWUgPSBQeUJ5dGVzX0FTX1lhbWxfU1RSSU5HKHZhbHVlX29iamVjdCkKKyAgICAgICAgICAgIGxlbmd0aCA9IFB5Qnl0ZXNfR0VUX1NJWkUodmFsdWVfb2JqZWN0KQorICAgICAgICAgICAgcGxhaW5faW1wbGljaXQgPSAwCisgICAgICAgICAgICBxdW90ZWRfaW1wbGljaXQgPSAwCisgICAgICAgICAgICBpZiBldmVudF9vYmplY3QuaW1wbGljaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGxhaW5faW1wbGljaXQgPSBldmVudF9vYmplY3QuaW1wbGljaXRbMF0KKyAgICAgICAgICAgICAgICBxdW90ZWRfaW1wbGljaXQgPSBldmVudF9vYmplY3QuaW1wbGljaXRbMV0KKyAgICAgICAgICAgIHN0eWxlX29iamVjdCA9IGV2ZW50X29iamVjdC5zdHlsZQorICAgICAgICAgICAgc2NhbGFyX3N0eWxlID0gWUFNTF9QTEFJTl9TQ0FMQVJfU1RZTEUKKyAgICAgICAgICAgIGlmIHN0eWxlX29iamVjdCA9PSAiJyIgb3Igc3R5bGVfb2JqZWN0ID09IHUiJyI6CisgICAgICAgICAgICAgICAgc2NhbGFyX3N0eWxlID0gWUFNTF9TSU5HTEVfUVVPVEVEX1NDQUxBUl9TVFlMRQorICAgICAgICAgICAgZWxpZiBzdHlsZV9vYmplY3QgPT0gIlwiIiBvciBzdHlsZV9vYmplY3QgPT0gdSJcIiI6CisgICAgICAgICAgICAgICAgc2NhbGFyX3N0eWxlID0gWUFNTF9ET1VCTEVfUVVPVEVEX1NDQUxBUl9TVFlMRQorICAgICAgICAgICAgZWxpZiBzdHlsZV9vYmplY3QgPT0gInwiIG9yIHN0eWxlX29iamVjdCA9PSB1InwiOgorICAgICAgICAgICAgICAgIHNjYWxhcl9zdHlsZSA9IFlBTUxfTElURVJBTF9TQ0FMQVJfU1RZTEUKKyAgICAgICAgICAgIGVsaWYgc3R5bGVfb2JqZWN0ID09ICI+IiBvciBzdHlsZV9vYmplY3QgPT0gdSI+IjoKKyAgICAgICAgICAgICAgICBzY2FsYXJfc3R5bGUgPSBZQU1MX0ZPTERFRF9TQ0FMQVJfU1RZTEUKKyAgICAgICAgICAgIGlmIHlhbWxfc2NhbGFyX2V2ZW50X2luaXRpYWxpemUoZXZlbnQsIGFuY2hvciwgdGFnLCB2YWx1ZSwgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBwbGFpbl9pbXBsaWNpdCwgcXVvdGVkX2ltcGxpY2l0LCBzY2FsYXJfc3R5bGUpID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgTWVtb3J5RXJyb3IKKyAgICAgICAgZWxpZiBldmVudF9jbGFzcyBpcyBTZXF1ZW5jZVN0YXJ0RXZlbnQ6CisgICAgICAgICAgICBhbmNob3IgPSBOVUxMCisgICAgICAgICAgICBhbmNob3Jfb2JqZWN0ID0gZXZlbnRfb2JqZWN0LmFuY2hvcgorICAgICAgICAgICAgaWYgYW5jaG9yX29iamVjdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBQeVVuaWNvZGVfQ2hlY2tFeGFjdChhbmNob3Jfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgYW5jaG9yX29iamVjdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoYW5jaG9yX29iamVjdCkKKyAgICAgICAgICAgICAgICBpZiBub3QgUHlCeXRlc19DaGVja0V4YWN0KGFuY2hvcl9vYmplY3QpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IodSJhbmNob3IgbXVzdCBiZSBhIHN0cmluZyIpCisgICAgICAgICAgICAgICAgYW5jaG9yID0gUHlCeXRlc19BU19ZYW1sX1NUUklORyhhbmNob3Jfb2JqZWN0KQorICAgICAgICAgICAgdGFnID0gTlVMTAorICAgICAgICAgICAgdGFnX29iamVjdCA9IGV2ZW50X29iamVjdC50YWcKKyAgICAgICAgICAgIGlmIHRhZ19vYmplY3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgUHlVbmljb2RlX0NoZWNrRXhhY3QodGFnX29iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIHRhZ19vYmplY3QgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKHRhZ19vYmplY3QpCisgICAgICAgICAgICAgICAgaWYgbm90IFB5Qnl0ZXNfQ2hlY2tFeGFjdCh0YWdfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHUidGFnIG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICAgICAgICAgIHRhZyA9IFB5Qnl0ZXNfQVNfWWFtbF9TVFJJTkcodGFnX29iamVjdCkKKyAgICAgICAgICAgIGltcGxpY2l0ID0gMAorICAgICAgICAgICAgaWYgZXZlbnRfb2JqZWN0LmltcGxpY2l0OgorICAgICAgICAgICAgICAgIGltcGxpY2l0ID0gMQorICAgICAgICAgICAgc2VxdWVuY2Vfc3R5bGUgPSBZQU1MX0JMT0NLX1NFUVVFTkNFX1NUWUxFCisgICAgICAgICAgICBpZiBldmVudF9vYmplY3QuZmxvd19zdHlsZToKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZV9zdHlsZSA9IFlBTUxfRkxPV19TRVFVRU5DRV9TVFlMRQorICAgICAgICAgICAgaWYgeWFtbF9zZXF1ZW5jZV9zdGFydF9ldmVudF9pbml0aWFsaXplKGV2ZW50LCBhbmNob3IsIHRhZywKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQsIHNlcXVlbmNlX3N0eWxlKSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIE1lbW9yeUVycm9yCisgICAgICAgIGVsaWYgZXZlbnRfY2xhc3MgaXMgTWFwcGluZ1N0YXJ0RXZlbnQ6CisgICAgICAgICAgICBhbmNob3IgPSBOVUxMCisgICAgICAgICAgICBhbmNob3Jfb2JqZWN0ID0gZXZlbnRfb2JqZWN0LmFuY2hvcgorICAgICAgICAgICAgaWYgYW5jaG9yX29iamVjdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBQeVVuaWNvZGVfQ2hlY2tFeGFjdChhbmNob3Jfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgYW5jaG9yX29iamVjdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoYW5jaG9yX29iamVjdCkKKyAgICAgICAgICAgICAgICBpZiBub3QgUHlCeXRlc19DaGVja0V4YWN0KGFuY2hvcl9vYmplY3QpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IodSJhbmNob3IgbXVzdCBiZSBhIHN0cmluZyIpCisgICAgICAgICAgICAgICAgYW5jaG9yID0gUHlCeXRlc19BU19ZYW1sX1NUUklORyhhbmNob3Jfb2JqZWN0KQorICAgICAgICAgICAgdGFnID0gTlVMTAorICAgICAgICAgICAgdGFnX29iamVjdCA9IGV2ZW50X29iamVjdC50YWcKKyAgICAgICAgICAgIGlmIHRhZ19vYmplY3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgUHlVbmljb2RlX0NoZWNrRXhhY3QodGFnX29iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIHRhZ19vYmplY3QgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKHRhZ19vYmplY3QpCisgICAgICAgICAgICAgICAgaWYgbm90IFB5Qnl0ZXNfQ2hlY2tFeGFjdCh0YWdfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHUidGFnIG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICAgICAgICAgIHRhZyA9IFB5Qnl0ZXNfQVNfWWFtbF9TVFJJTkcodGFnX29iamVjdCkKKyAgICAgICAgICAgIGltcGxpY2l0ID0gMAorICAgICAgICAgICAgaWYgZXZlbnRfb2JqZWN0LmltcGxpY2l0OgorICAgICAgICAgICAgICAgIGltcGxpY2l0ID0gMQorICAgICAgICAgICAgbWFwcGluZ19zdHlsZSA9IFlBTUxfQkxPQ0tfTUFQUElOR19TVFlMRQorICAgICAgICAgICAgaWYgZXZlbnRfb2JqZWN0LmZsb3dfc3R5bGU6CisgICAgICAgICAgICAgICAgbWFwcGluZ19zdHlsZSA9IFlBTUxfRkxPV19NQVBQSU5HX1NUWUxFCisgICAgICAgICAgICBpZiB5YW1sX21hcHBpbmdfc3RhcnRfZXZlbnRfaW5pdGlhbGl6ZShldmVudCwgYW5jaG9yLCB0YWcsCisgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0LCBtYXBwaW5nX3N0eWxlKSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIE1lbW9yeUVycm9yCisgICAgICAgIGVsaWYgZXZlbnRfY2xhc3MgaXMgU2VxdWVuY2VFbmRFdmVudDoKKyAgICAgICAgICAgIHlhbWxfc2VxdWVuY2VfZW5kX2V2ZW50X2luaXRpYWxpemUoZXZlbnQpCisgICAgICAgIGVsaWYgZXZlbnRfY2xhc3MgaXMgTWFwcGluZ0VuZEV2ZW50OgorICAgICAgICAgICAgeWFtbF9tYXBwaW5nX2VuZF9ldmVudF9pbml0aWFsaXplKGV2ZW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHUiaW52YWxpZCBldmVudCAlcyIgJSBldmVudF9vYmplY3QpCisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgZW1pdChzZWxmLCBldmVudF9vYmplY3QpOgorICAgICAgICBjZGVmIHlhbWxfZXZlbnRfdCBldmVudAorICAgICAgICBzZWxmLl9vYmplY3RfdG9fZXZlbnQoZXZlbnRfb2JqZWN0LCAmZXZlbnQpCisgICAgICAgIGlmIHlhbWxfZW1pdHRlcl9lbWl0KCZzZWxmLmVtaXR0ZXIsICZldmVudCkgPT0gMDoKKyAgICAgICAgICAgIGVycm9yID0gc2VsZi5fZW1pdHRlcl9lcnJvcigpCisgICAgICAgICAgICByYWlzZSBlcnJvcgorCisgICAgZGVmIG9wZW4oc2VsZik6CisgICAgICAgIGNkZWYgeWFtbF9ldmVudF90IGV2ZW50CisgICAgICAgIGNkZWYgeWFtbF9lbmNvZGluZ190IGVuY29kaW5nCisgICAgICAgIGlmIHNlbGYuY2xvc2VkID09IC0xOgorICAgICAgICAgICAgaWYgc2VsZi51c2VfZW5jb2RpbmcgPT0gdSd1dGYtMTYtbGUnIG9yIHNlbGYudXNlX2VuY29kaW5nID09ICd1dGYtMTYtbGUnOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gWUFNTF9VVEYxNkxFX0VOQ09ESU5HCisgICAgICAgICAgICBlbGlmIHNlbGYudXNlX2VuY29kaW5nID09IHUndXRmLTE2LWJlJyBvciBzZWxmLnVzZV9lbmNvZGluZyA9PSAndXRmLTE2LWJlJzoKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFlBTUxfVVRGMTZCRV9FTkNPRElORworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFlBTUxfVVRGOF9FTkNPRElORworICAgICAgICAgICAgaWYgc2VsZi51c2VfZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmR1bXBfdW5pY29kZSA9IDEKKyAgICAgICAgICAgIGlmIHNlbGYuZHVtcF91bmljb2RlID09IDE6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBZQU1MX1VURjhfRU5DT0RJTkcKKyAgICAgICAgICAgIHlhbWxfc3RyZWFtX3N0YXJ0X2V2ZW50X2luaXRpYWxpemUoJmV2ZW50LCBlbmNvZGluZykKKyAgICAgICAgICAgIGlmIHlhbWxfZW1pdHRlcl9lbWl0KCZzZWxmLmVtaXR0ZXIsICZldmVudCkgPT0gMDoKKyAgICAgICAgICAgICAgICBlcnJvciA9IHNlbGYuX2VtaXR0ZXJfZXJyb3IoKQorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yCisgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IDAKKyAgICAgICAgZWxpZiBzZWxmLmNsb3NlZCA9PSAxOgorICAgICAgICAgICAgcmFpc2UgU2VyaWFsaXplckVycm9yKHUic2VyaWFsaXplciBpcyBjbG9zZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgU2VyaWFsaXplckVycm9yKHUic2VyaWFsaXplciBpcyBhbHJlYWR5IG9wZW5lZCIpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGNkZWYgeWFtbF9ldmVudF90IGV2ZW50CisgICAgICAgIGlmIHNlbGYuY2xvc2VkID09IC0xOgorICAgICAgICAgICAgcmFpc2UgU2VyaWFsaXplckVycm9yKHUic2VyaWFsaXplciBpcyBub3Qgb3BlbmVkIikKKyAgICAgICAgZWxpZiBzZWxmLmNsb3NlZCA9PSAwOgorICAgICAgICAgICAgeWFtbF9zdHJlYW1fZW5kX2V2ZW50X2luaXRpYWxpemUoJmV2ZW50KQorICAgICAgICAgICAgaWYgeWFtbF9lbWl0dGVyX2VtaXQoJnNlbGYuZW1pdHRlciwgJmV2ZW50KSA9PSAwOgorICAgICAgICAgICAgICAgIGVycm9yID0gc2VsZi5fZW1pdHRlcl9lcnJvcigpCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IKKyAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gMQorCisgICAgZGVmIHNlcmlhbGl6ZShzZWxmLCBub2RlKToKKyAgICAgICAgY2RlZiB5YW1sX2V2ZW50X3QgZXZlbnQKKyAgICAgICAgY2RlZiB5YW1sX3ZlcnNpb25fZGlyZWN0aXZlX3QgdmVyc2lvbl9kaXJlY3RpdmVfdmFsdWUKKyAgICAgICAgY2RlZiB5YW1sX3ZlcnNpb25fZGlyZWN0aXZlX3QgKnZlcnNpb25fZGlyZWN0aXZlCisgICAgICAgIGNkZWYgeWFtbF90YWdfZGlyZWN0aXZlX3QgdGFnX2RpcmVjdGl2ZXNfdmFsdWVbMTI4XQorICAgICAgICBjZGVmIHlhbWxfdGFnX2RpcmVjdGl2ZV90ICp0YWdfZGlyZWN0aXZlc19zdGFydAorICAgICAgICBjZGVmIHlhbWxfdGFnX2RpcmVjdGl2ZV90ICp0YWdfZGlyZWN0aXZlc19lbmQKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQgPT0gLTE6CisgICAgICAgICAgICByYWlzZSBTZXJpYWxpemVyRXJyb3IodSJzZXJpYWxpemVyIGlzIG5vdCBvcGVuZWQiKQorICAgICAgICBlbGlmIHNlbGYuY2xvc2VkID09IDE6CisgICAgICAgICAgICByYWlzZSBTZXJpYWxpemVyRXJyb3IodSJzZXJpYWxpemVyIGlzIGNsb3NlZCIpCisgICAgICAgIGNhY2hlID0gW10KKyAgICAgICAgdmVyc2lvbl9kaXJlY3RpdmUgPSBOVUxMCisgICAgICAgIGlmIHNlbGYudXNlX3ZlcnNpb246CisgICAgICAgICAgICB2ZXJzaW9uX2RpcmVjdGl2ZV92YWx1ZS5tYWpvciA9IHNlbGYudXNlX3ZlcnNpb25bMF0KKyAgICAgICAgICAgIHZlcnNpb25fZGlyZWN0aXZlX3ZhbHVlLm1pbm9yID0gc2VsZi51c2VfdmVyc2lvblsxXQorICAgICAgICAgICAgdmVyc2lvbl9kaXJlY3RpdmUgPSAmdmVyc2lvbl9kaXJlY3RpdmVfdmFsdWUKKyAgICAgICAgdGFnX2RpcmVjdGl2ZXNfc3RhcnQgPSBOVUxMCisgICAgICAgIHRhZ19kaXJlY3RpdmVzX2VuZCA9IE5VTEwKKyAgICAgICAgaWYgc2VsZi51c2VfdGFnczoKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnVzZV90YWdzKSA+IDEyODoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHUidG9vIG1hbnkgdGFncyIpCisgICAgICAgICAgICB0YWdfZGlyZWN0aXZlc19zdGFydCA9IHRhZ19kaXJlY3RpdmVzX3ZhbHVlCisgICAgICAgICAgICB0YWdfZGlyZWN0aXZlc19lbmQgPSB0YWdfZGlyZWN0aXZlc192YWx1ZQorICAgICAgICAgICAgZm9yIGhhbmRsZSBpbiBzZWxmLnVzZV90YWdzOgorICAgICAgICAgICAgICAgIHByZWZpeCA9IHNlbGYudXNlX3RhZ3NbaGFuZGxlXQorICAgICAgICAgICAgICAgIGlmIFB5VW5pY29kZV9DaGVja0V4YWN0KGhhbmRsZSk6CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoaGFuZGxlKQorICAgICAgICAgICAgICAgICAgICBjYWNoZS5hcHBlbmQoaGFuZGxlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBQeUJ5dGVzX0NoZWNrRXhhY3QoaGFuZGxlKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHUidGFnIGhhbmRsZSBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICB0YWdfZGlyZWN0aXZlc19lbmQuaGFuZGxlID0gUHlCeXRlc19BU19ZYW1sX1NUUklORyhoYW5kbGUpCisgICAgICAgICAgICAgICAgaWYgUHlVbmljb2RlX0NoZWNrRXhhY3QocHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZyhwcmVmaXgpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlLmFwcGVuZChwcmVmaXgpCisgICAgICAgICAgICAgICAgaWYgbm90IFB5Qnl0ZXNfQ2hlY2tFeGFjdChwcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IodSJ0YWcgcHJlZml4IG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICAgICAgICAgIHRhZ19kaXJlY3RpdmVzX2VuZC5wcmVmaXggPSBQeUJ5dGVzX0FTX1lhbWxfU1RSSU5HKHByZWZpeCkKKyAgICAgICAgICAgICAgICB0YWdfZGlyZWN0aXZlc19lbmQgPSB0YWdfZGlyZWN0aXZlc19lbmQrMQorICAgICAgICBpZiB5YW1sX2RvY3VtZW50X3N0YXJ0X2V2ZW50X2luaXRpYWxpemUoJmV2ZW50LCB2ZXJzaW9uX2RpcmVjdGl2ZSwKKyAgICAgICAgICAgICAgICB0YWdfZGlyZWN0aXZlc19zdGFydCwgdGFnX2RpcmVjdGl2ZXNfZW5kLAorICAgICAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfc3RhcnRfaW1wbGljaXQpID09IDA6CisgICAgICAgICAgICByYWlzZSBNZW1vcnlFcnJvcgorICAgICAgICBpZiB5YW1sX2VtaXR0ZXJfZW1pdCgmc2VsZi5lbWl0dGVyLCAmZXZlbnQpID09IDA6CisgICAgICAgICAgICBlcnJvciA9IHNlbGYuX2VtaXR0ZXJfZXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgZXJyb3IKKyAgICAgICAgc2VsZi5fYW5jaG9yX25vZGUobm9kZSkKKyAgICAgICAgc2VsZi5fc2VyaWFsaXplX25vZGUobm9kZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgeWFtbF9kb2N1bWVudF9lbmRfZXZlbnRfaW5pdGlhbGl6ZSgmZXZlbnQsIHNlbGYuZG9jdW1lbnRfZW5kX2ltcGxpY2l0KQorICAgICAgICBpZiB5YW1sX2VtaXR0ZXJfZW1pdCgmc2VsZi5lbWl0dGVyLCAmZXZlbnQpID09IDA6CisgICAgICAgICAgICBlcnJvciA9IHNlbGYuX2VtaXR0ZXJfZXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgZXJyb3IKKyAgICAgICAgc2VsZi5zZXJpYWxpemVkX25vZGVzID0ge30KKyAgICAgICAgc2VsZi5hbmNob3JzID0ge30KKyAgICAgICAgc2VsZi5sYXN0X2FsaWFzX2lkID0gMAorCisgICAgY2RlZiBpbnQgX2FuY2hvcl9ub2RlKHNlbGYsIG9iamVjdCBub2RlKSBleGNlcHQgMDoKKyAgICAgICAgaWYgbm9kZSBpbiBzZWxmLmFuY2hvcnM6CisgICAgICAgICAgICBpZiBzZWxmLmFuY2hvcnNbbm9kZV0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmxhc3RfYWxpYXNfaWQgPSBzZWxmLmxhc3RfYWxpYXNfaWQrMQorICAgICAgICAgICAgICAgIHNlbGYuYW5jaG9yc1tub2RlXSA9IHUiaWQlMDNkIiAlIHNlbGYubGFzdF9hbGlhc19pZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hbmNob3JzW25vZGVdID0gTm9uZQorICAgICAgICAgICAgbm9kZV9jbGFzcyA9IG5vZGUuX19jbGFzc19fCisgICAgICAgICAgICBpZiBub2RlX2NsYXNzIGlzIFNlcXVlbmNlTm9kZToKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBub2RlLnZhbHVlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbmNob3Jfbm9kZShpdGVtKQorICAgICAgICAgICAgZWxpZiBub2RlX2NsYXNzIGlzIE1hcHBpbmdOb2RlOgorICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIG5vZGUudmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FuY2hvcl9ub2RlKGtleSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYW5jaG9yX25vZGUodmFsdWUpCisgICAgICAgIHJldHVybiAxCisKKyAgICBjZGVmIGludCBfc2VyaWFsaXplX25vZGUoc2VsZiwgb2JqZWN0IG5vZGUsIG9iamVjdCBwYXJlbnQsIG9iamVjdCBpbmRleCkgZXhjZXB0IDA6CisgICAgICAgIGNkZWYgeWFtbF9ldmVudF90IGV2ZW50CisgICAgICAgIGNkZWYgaW50IGltcGxpY2l0CisgICAgICAgIGNkZWYgaW50IHBsYWluX2ltcGxpY2l0CisgICAgICAgIGNkZWYgaW50IHF1b3RlZF9pbXBsaWNpdAorICAgICAgICBjZGVmIHlhbWxfY2hhcl90ICphbmNob3IKKyAgICAgICAgY2RlZiB5YW1sX2NoYXJfdCAqdGFnCisgICAgICAgIGNkZWYgeWFtbF9jaGFyX3QgKnZhbHVlCisgICAgICAgIGNkZWYgaW50IGxlbmd0aAorICAgICAgICBjZGVmIGludCBpdGVtX2luZGV4CisgICAgICAgIGNkZWYgeWFtbF9zY2FsYXJfc3R5bGVfdCBzY2FsYXJfc3R5bGUKKyAgICAgICAgY2RlZiB5YW1sX3NlcXVlbmNlX3N0eWxlX3Qgc2VxdWVuY2Vfc3R5bGUKKyAgICAgICAgY2RlZiB5YW1sX21hcHBpbmdfc3R5bGVfdCBtYXBwaW5nX3N0eWxlCisgICAgICAgIGFuY2hvcl9vYmplY3QgPSBzZWxmLmFuY2hvcnNbbm9kZV0KKyAgICAgICAgYW5jaG9yID0gTlVMTAorICAgICAgICBpZiBhbmNob3Jfb2JqZWN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgUHlVbmljb2RlX0NoZWNrRXhhY3QoYW5jaG9yX29iamVjdCk6CisgICAgICAgICAgICAgICAgYW5jaG9yX29iamVjdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoYW5jaG9yX29iamVjdCkKKyAgICAgICAgICAgIGlmIG5vdCBQeUJ5dGVzX0NoZWNrRXhhY3QoYW5jaG9yX29iamVjdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHUiYW5jaG9yIG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICAgICAgYW5jaG9yID0gUHlCeXRlc19BU19ZYW1sX1NUUklORyhhbmNob3Jfb2JqZWN0KQorICAgICAgICBpZiBub2RlIGluIHNlbGYuc2VyaWFsaXplZF9ub2RlczoKKyAgICAgICAgICAgIGlmIHlhbWxfYWxpYXNfZXZlbnRfaW5pdGlhbGl6ZSgmZXZlbnQsIGFuY2hvcikgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBNZW1vcnlFcnJvcgorICAgICAgICAgICAgaWYgeWFtbF9lbWl0dGVyX2VtaXQoJnNlbGYuZW1pdHRlciwgJmV2ZW50KSA9PSAwOgorICAgICAgICAgICAgICAgIGVycm9yID0gc2VsZi5fZW1pdHRlcl9lcnJvcigpCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5vZGVfY2xhc3MgPSBub2RlLl9fY2xhc3NfXworICAgICAgICAgICAgc2VsZi5zZXJpYWxpemVkX25vZGVzW25vZGVdID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5kZXNjZW5kX3Jlc29sdmVyKHBhcmVudCwgaW5kZXgpCisgICAgICAgICAgICBpZiBub2RlX2NsYXNzIGlzIFNjYWxhck5vZGU6CisgICAgICAgICAgICAgICAgcGxhaW5faW1wbGljaXQgPSAwCisgICAgICAgICAgICAgICAgcXVvdGVkX2ltcGxpY2l0ID0gMAorICAgICAgICAgICAgICAgIHRhZ19vYmplY3QgPSBub2RlLnRhZworICAgICAgICAgICAgICAgIGlmIHNlbGYucmVzb2x2ZShTY2FsYXJOb2RlLCBub2RlLnZhbHVlLCAoVHJ1ZSwgRmFsc2UpKSA9PSB0YWdfb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICBwbGFpbl9pbXBsaWNpdCA9IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJlc29sdmUoU2NhbGFyTm9kZSwgbm9kZS52YWx1ZSwgKEZhbHNlLCBUcnVlKSkgPT0gdGFnX29iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcXVvdGVkX2ltcGxpY2l0ID0gMQorICAgICAgICAgICAgICAgIHRhZyA9IE5VTEwKKyAgICAgICAgICAgICAgICBpZiB0YWdfb2JqZWN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh0YWdfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZ19vYmplY3QgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKHRhZ19vYmplY3QpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBQeUJ5dGVzX0NoZWNrRXhhY3QodGFnX29iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IodSJ0YWcgbXVzdCBiZSBhIHN0cmluZyIpCisgICAgICAgICAgICAgICAgICAgIHRhZyA9IFB5Qnl0ZXNfQVNfWWFtbF9TVFJJTkcodGFnX29iamVjdCkKKyAgICAgICAgICAgICAgICB2YWx1ZV9vYmplY3QgPSBub2RlLnZhbHVlCisgICAgICAgICAgICAgICAgaWYgUHlVbmljb2RlX0NoZWNrRXhhY3QodmFsdWVfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVfb2JqZWN0ID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZyh2YWx1ZV9vYmplY3QpCisgICAgICAgICAgICAgICAgaWYgbm90IFB5Qnl0ZXNfQ2hlY2tFeGFjdCh2YWx1ZV9vYmplY3QpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IodSJ2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5Qnl0ZXNfQVNfWWFtbF9TVFJJTkcodmFsdWVfb2JqZWN0KQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IFB5Qnl0ZXNfR0VUX1NJWkUodmFsdWVfb2JqZWN0KQorICAgICAgICAgICAgICAgIHN0eWxlX29iamVjdCA9IG5vZGUuc3R5bGUKKyAgICAgICAgICAgICAgICBzY2FsYXJfc3R5bGUgPSBZQU1MX1BMQUlOX1NDQUxBUl9TVFlMRQorICAgICAgICAgICAgICAgIGlmIHN0eWxlX29iamVjdCA9PSAiJyIgb3Igc3R5bGVfb2JqZWN0ID09IHUiJyI6CisgICAgICAgICAgICAgICAgICAgIHNjYWxhcl9zdHlsZSA9IFlBTUxfU0lOR0xFX1FVT1RFRF9TQ0FMQVJfU1RZTEUKKyAgICAgICAgICAgICAgICBlbGlmIHN0eWxlX29iamVjdCA9PSAiXCIiIG9yIHN0eWxlX29iamVjdCA9PSB1IlwiIjoKKyAgICAgICAgICAgICAgICAgICAgc2NhbGFyX3N0eWxlID0gWUFNTF9ET1VCTEVfUVVPVEVEX1NDQUxBUl9TVFlMRQorICAgICAgICAgICAgICAgIGVsaWYgc3R5bGVfb2JqZWN0ID09ICJ8IiBvciBzdHlsZV9vYmplY3QgPT0gdSJ8IjoKKyAgICAgICAgICAgICAgICAgICAgc2NhbGFyX3N0eWxlID0gWUFNTF9MSVRFUkFMX1NDQUxBUl9TVFlMRQorICAgICAgICAgICAgICAgIGVsaWYgc3R5bGVfb2JqZWN0ID09ICI+IiBvciBzdHlsZV9vYmplY3QgPT0gdSI+IjoKKyAgICAgICAgICAgICAgICAgICAgc2NhbGFyX3N0eWxlID0gWUFNTF9GT0xERURfU0NBTEFSX1NUWUxFCisgICAgICAgICAgICAgICAgaWYgeWFtbF9zY2FsYXJfZXZlbnRfaW5pdGlhbGl6ZSgmZXZlbnQsIGFuY2hvciwgdGFnLCB2YWx1ZSwgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5faW1wbGljaXQsIHF1b3RlZF9pbXBsaWNpdCwgc2NhbGFyX3N0eWxlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBNZW1vcnlFcnJvcgorICAgICAgICAgICAgICAgIGlmIHlhbWxfZW1pdHRlcl9lbWl0KCZzZWxmLmVtaXR0ZXIsICZldmVudCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBzZWxmLl9lbWl0dGVyX2Vycm9yKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IKKyAgICAgICAgICAgIGVsaWYgbm9kZV9jbGFzcyBpcyBTZXF1ZW5jZU5vZGU6CisgICAgICAgICAgICAgICAgaW1wbGljaXQgPSAwCisgICAgICAgICAgICAgICAgdGFnX29iamVjdCA9IG5vZGUudGFnCisgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXNvbHZlKFNlcXVlbmNlTm9kZSwgbm9kZS52YWx1ZSwgVHJ1ZSkgPT0gdGFnX29iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQgPSAxCisgICAgICAgICAgICAgICAgdGFnID0gTlVMTAorICAgICAgICAgICAgICAgIGlmIHRhZ19vYmplY3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIFB5VW5pY29kZV9DaGVja0V4YWN0KHRhZ19vYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFnX29iamVjdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcodGFnX29iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IFB5Qnl0ZXNfQ2hlY2tFeGFjdCh0YWdfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcih1InRhZyBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICAgICAgdGFnID0gUHlCeXRlc19BU19ZYW1sX1NUUklORyh0YWdfb2JqZWN0KQorICAgICAgICAgICAgICAgIHNlcXVlbmNlX3N0eWxlID0gWUFNTF9CTE9DS19TRVFVRU5DRV9TVFlMRQorICAgICAgICAgICAgICAgIGlmIG5vZGUuZmxvd19zdHlsZToKKyAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2Vfc3R5bGUgPSBZQU1MX0ZMT1dfU0VRVUVOQ0VfU1RZTEUKKyAgICAgICAgICAgICAgICBpZiB5YW1sX3NlcXVlbmNlX3N0YXJ0X2V2ZW50X2luaXRpYWxpemUoJmV2ZW50LCBhbmNob3IsIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0LCBzZXF1ZW5jZV9zdHlsZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTWVtb3J5RXJyb3IKKyAgICAgICAgICAgICAgICBpZiB5YW1sX2VtaXR0ZXJfZW1pdCgmc2VsZi5lbWl0dGVyLCAmZXZlbnQpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gc2VsZi5fZW1pdHRlcl9lcnJvcigpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yCisgICAgICAgICAgICAgICAgaXRlbV9pbmRleCA9IDAKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBub2RlLnZhbHVlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJpYWxpemVfbm9kZShpdGVtLCBub2RlLCBpdGVtX2luZGV4KQorICAgICAgICAgICAgICAgICAgICBpdGVtX2luZGV4ID0gaXRlbV9pbmRleCsxCisgICAgICAgICAgICAgICAgeWFtbF9zZXF1ZW5jZV9lbmRfZXZlbnRfaW5pdGlhbGl6ZSgmZXZlbnQpCisgICAgICAgICAgICAgICAgaWYgeWFtbF9lbWl0dGVyX2VtaXQoJnNlbGYuZW1pdHRlciwgJmV2ZW50KSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHNlbGYuX2VtaXR0ZXJfZXJyb3IoKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcgorICAgICAgICAgICAgZWxpZiBub2RlX2NsYXNzIGlzIE1hcHBpbmdOb2RlOgorICAgICAgICAgICAgICAgIGltcGxpY2l0ID0gMAorICAgICAgICAgICAgICAgIHRhZ19vYmplY3QgPSBub2RlLnRhZworICAgICAgICAgICAgICAgIGlmIHNlbGYucmVzb2x2ZShNYXBwaW5nTm9kZSwgbm9kZS52YWx1ZSwgVHJ1ZSkgPT0gdGFnX29iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQgPSAxCisgICAgICAgICAgICAgICAgdGFnID0gTlVMTAorICAgICAgICAgICAgICAgIGlmIHRhZ19vYmplY3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIFB5VW5pY29kZV9DaGVja0V4YWN0KHRhZ19vYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFnX29iamVjdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcodGFnX29iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IFB5Qnl0ZXNfQ2hlY2tFeGFjdCh0YWdfb2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcih1InRhZyBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICAgICAgdGFnID0gUHlCeXRlc19BU19ZYW1sX1NUUklORyh0YWdfb2JqZWN0KQorICAgICAgICAgICAgICAgIG1hcHBpbmdfc3R5bGUgPSBZQU1MX0JMT0NLX01BUFBJTkdfU1RZTEUKKyAgICAgICAgICAgICAgICBpZiBub2RlLmZsb3dfc3R5bGU6CisgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdfc3R5bGUgPSBZQU1MX0ZMT1dfTUFQUElOR19TVFlMRQorICAgICAgICAgICAgICAgIGlmIHlhbWxfbWFwcGluZ19zdGFydF9ldmVudF9pbml0aWFsaXplKCZldmVudCwgYW5jaG9yLCB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdCwgbWFwcGluZ19zdHlsZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTWVtb3J5RXJyb3IKKyAgICAgICAgICAgICAgICBpZiB5YW1sX2VtaXR0ZXJfZW1pdCgmc2VsZi5lbWl0dGVyLCAmZXZlbnQpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gc2VsZi5fZW1pdHRlcl9lcnJvcigpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yCisgICAgICAgICAgICAgICAgZm9yIGl0ZW1fa2V5LCBpdGVtX3ZhbHVlIGluIG5vZGUudmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcmlhbGl6ZV9ub2RlKGl0ZW1fa2V5LCBub2RlLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJpYWxpemVfbm9kZShpdGVtX3ZhbHVlLCBub2RlLCBpdGVtX2tleSkKKyAgICAgICAgICAgICAgICB5YW1sX21hcHBpbmdfZW5kX2V2ZW50X2luaXRpYWxpemUoJmV2ZW50KQorICAgICAgICAgICAgICAgIGlmIHlhbWxfZW1pdHRlcl9lbWl0KCZzZWxmLmVtaXR0ZXIsICZldmVudCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBzZWxmLl9lbWl0dGVyX2Vycm9yKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IKKyAgICAgICAgICAgIHNlbGYuYXNjZW5kX3Jlc29sdmVyKCkKKyAgICAgICAgcmV0dXJuIDEKKworY2RlZiBpbnQgb3V0cHV0X2hhbmRsZXIodm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqYnVmZmVydSwgc2l6ZV90IHNpemUpIGV4Y2VwdCAwOgorICAgIGNkZWYgQ0VtaXR0ZXIgZW1pdHRlcgorICAgIGNkZWYgY2hhciAqYnVmZmVyCisgICAgYnVmZmVyID0gPGNoYXIgKj5idWZmZXJ1CisgICAgZW1pdHRlciA9IDxDRW1pdHRlcj5kYXRhCisgICAgaWYgZW1pdHRlci5kdW1wX3VuaWNvZGUgPT0gMDoKKyAgICAgICAgdmFsdWUgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGJ1ZmZlciwgc2l6ZSkKKyAgICBlbHNlOgorICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGJ1ZmZlciwgc2l6ZSwgJ3N0cmljdCcpCisgICAgZW1pdHRlci5zdHJlYW0ud3JpdGUodmFsdWUpCisgICAgcmV0dXJuIDEKKwo=