ZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1Vuc3VwcG9ydGVkL0ludFZDNi9OTFNYbGF0L05MU1hsYXQuZHNwIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L05MU1hsYXQvTkxTWGxhdC5kc3AKaW5kZXggN2QzZWQ1MC4uZTJiODg4OCAxMDA2NDQKLS0tIGEvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L05MU1hsYXQvTkxTWGxhdC5kc3AKKysrIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L05MU1hsYXQvTkxTWGxhdC5kc3AKQEAgLTQyLDcgKzQyLDcgQEAKICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCiAjIFBST1AgVGFyZ2V0X0RpciAiIgogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvRzYgL01EIC9aYSAvVzMgL0dYIC9PMiAvT2IyIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9JICJcSUNVXEluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1phIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0kgIlxpY3VfMV8zXzFcSW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9GRCAvYwogIyBTVUJUUkFDVCBDUFAgL1lYCiAjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgogIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCkBAIC01MSw3ICs1MSw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvCiBMSU5LMzI9bGluay5leGUKICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBJWERvbS5saWIgSVhVdGlsLmxpYiBJWFBhci5saWIgSVhTQVgubGliIGljdXVjLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjMuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiIC9saWJwYXRoOiJcSUNVXExpYlxSZWxlYXNlIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYRG9tLmxpYiBJWFV0aWwubGliIElYUGFyLmxpYiBJWFNBWC5saWIgaWN1dWMubGliIC9ub2xvZ28gL3ZlcnNpb246My4wIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIgL2xpYnBhdGg6IlxpY3VfMV8zXzFcTGliXFJlbGVhc2UiCiAKICFFTFNFSUYgICIkKENGRykiID09ICJOTFNYbGF0IC0gV2luMzIgRGVidWciCiAKQEAgLTY3LDcgKzY3LDcgQEAKICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCiAjIFBST1AgVGFyZ2V0X0RpciAiIgogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvWmEgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9JICJcSUNVXEluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvWmEgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9JICJcaWN1XzFfM18xXEluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRkQgL0daIC9jCiAjIFNVQlRSQUNUIENQUCAvWVgKICMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCiAjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKQEAgLTc2LDcgKzc2LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYRG9tLmxpYiBJWFV0aWwubGliIElYUGFyLmxpYiBJWFNBWC5saWIgaWN1dWMubGliIC9ub2xvZ28gL3ZlcnNpb246My4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciIC9saWJwYXRoOiJcSUNVXExpYlxEZWJ1ZyIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBJWERvbS5saWIgSVhVdGlsLmxpYiBJWFBhci5saWIgSVhTQVgubGliIGljdXVjLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjMuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIiAvbGlicGF0aDoiXGljdV8xXzNfMVxMaWJcRGVidWciCiAKICFFTkRJRiAKIApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1ZhbGlkYXRvcnMvVmFsaWRhdG9ycy5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9VbnN1cHBvcnRlZC9JbnRWQzYvVmFsaWRhdG9ycy9WYWxpZGF0b3JzLmRzcAppbmRleCA0ZjczYjM3Li5jYWRlZjA3IDEwMDY0NAotLS0gYS9Qcm9qZWN0cy9XaW4zMi9VbnN1cHBvcnRlZC9JbnRWQzYvVmFsaWRhdG9ycy9WYWxpZGF0b3JzLmRzcAorKysgYi9Qcm9qZWN0cy9XaW4zMi9VbnN1cHBvcnRlZC9JbnRWQzYvVmFsaWRhdG9ycy9WYWxpZGF0b3JzLmRzcApAQCAtODIsNyArODIsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYVXRpbC5MaWIgSVhDb3JlLkxpYiBJWFNBWC5MaWIgL25vbG9nbyAvYmFzZToiMHgxMjAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXElYVmFsLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIgL2xpYnBhdGg6IlxJQ1VcTGliXERlYnVnIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYVXRpbC5MaWIgSVhDb3JlLkxpYiBJWFNBWC5MaWIgL25vbG9nbyAvYmFzZToiMHgxMjAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXElYVmFsLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKICMgU1VCVFJBQ1QgTElOSzMyIC9wcm9maWxlCiAKICFFTkRJRiAKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1Vuc3VwcG9ydGVkL0ludFZDNi9YTUw0Q1BhcnNlci9YTUw0Q1BhcnNlci5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9VbnN1cHBvcnRlZC9JbnRWQzYvWE1MNENQYXJzZXIvWE1MNENQYXJzZXIuZHNwCmluZGV4IDAwNzYwOWMuLjlmNjc0OTAgMTAwNjQ0Ci0tLSBhL1Byb2plY3RzL1dpbjMyL1Vuc3VwcG9ydGVkL0ludFZDNi9YTUw0Q1BhcnNlci9YTUw0Q1BhcnNlci5kc3AKKysrIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1hNTDRDUGFyc2VyL1hNTDRDUGFyc2VyLmRzcApAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NgotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYVXRpbC5MaWIgL25vbG9nbyAvYmFzZToiMHgxMTAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL21hcCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlL0lYQ29yZS5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIgL2xpYnBhdGg6IlxJQ1VcTGliXFJlbGVhc2UiCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgSVhVdGlsLkxpYiAvbm9sb2dvIC9iYXNlOiIweDExMDAwMDAwIiAvdmVyc2lvbjozLjAgL2RsbCAvbWFwIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UvSVhDb3JlLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgogIyBTVUJUUkFDVCBMSU5LMzIgL3Byb2ZpbGUKIAogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlhNTDRDUGFyc2VyIC0gV2luMzIgRGVidWciCkBAIC04Miw3ICs4Miw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvCiBMSU5LMzI9bGluay5leGUKICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0Ci0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgSVhVdGlsLkxpYiAvbm9sb2dvIC9iYXNlOiIweDExMDAwMDAwIiAvdmVyc2lvbjozLjAgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWcvSVhDb3JlLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIgL2xpYnBhdGg6IlxJQ1VcTGliXERlYnVnIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYVXRpbC5MaWIgL25vbG9nbyAvYmFzZToiMHgxMTAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnL0lYQ29yZS5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCiAjIFNVQlRSQUNUIExJTkszMiAvcHJvZmlsZSAvbWFwCiAKICFFTkRJRiAKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1Vuc3VwcG9ydGVkL0ludFZDNi9YTUxVdGlsL1hNTFV0aWwuZHNwIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1hNTFV0aWwvWE1MVXRpbC5kc3AKaW5kZXggYjA1MDFlZi4uZmMwMTgyZCAxMDA2NDQKLS0tIGEvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1hNTFV0aWwvWE1MVXRpbC5kc3AKKysrIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1hNTFV0aWwvWE1MVXRpbC5kc3AKQEAgLTQzLDcgKzQzLDcgQEAKICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCiAjIFBST1AgVGFyZ2V0X0RpciAiIgogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJYTUxVVElMX0VYUE9SVFMiIC9ZWCAvRkQgL2MKLSMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1phIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0kgIlxpY3VcaW5jbHVkZSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJQUk9KX1hNTFVUSUwiIC9EICJYTUxfVVNFX0lDVV9UUkFOU0NPREVSIiAvRCAiWE1MX1VTRV9XSU4zMl9NU0dMT0FERVIiIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvWmEgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvSSAiXGljdV8xXzNfMVxpbmNsdWRlIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlBST0pfWE1MVVRJTCIgL0QgIlhNTF9VU0VfSUNVX1RSQU5TQ09ERVIiIC9EICJYTUxfVVNFX1dJTjMyX01TR0xPQURFUiIgL0ZEIC9jCiAjIFNVQlRSQUNUIENQUCAvWVgKICMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgogIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgpAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NgotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGljdXVjLmxpYiAvbm9sb2dvIC9iYXNlOiIweDEwMDAwMDAwIiAvdmVyc2lvbjozLjAgL2RsbCAvbWFwIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UvSVhVdGlsLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIiAvbGlicGF0aDoiXElDVVxMaWJcUmVsZWFzZSIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpY3V1Yy5saWIgL25vbG9nbyAvYmFzZToiMHgxMDAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL21hcCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlL0lYVXRpbC5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIgL2xpYnBhdGg6IlxpY3VfMV8zXzFcTGliXFJlbGVhc2UiCiAjIFNVQlRSQUNUIExJTkszMiAvcHJvZmlsZQogCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiWE1MVXRpbCAtIFdpbjMyIERlYnVnIgpAQCAtNzEsNyArNzEsNyBAQAogIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKICMgUFJPUCBUYXJnZXRfRGlyICIiCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIlhNTFVUSUxfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MKLSMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9aYSAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9JICJcaWN1XGluY2x1ZGUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiUFJPSl9YTUxVVElMIiAvRCAiWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUiIgL0QgIlhNTF9VU0VfSU5NRU1PUllfTVNHTE9BREVSIiAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvWmEgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvSSAiXGljdV8xXzNfMVxpbmNsdWRlIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlBST0pfWE1MVVRJTCIgL0QgIlhNTF9VU0VfSUNVX1RSQU5TQ09ERVIiIC9EICJYTUxfVVNFX0lOTUVNT1JZX01TR0xPQURFUiIgL0ZEIC9HWiAvYwogIyBTVUJUUkFDVCBDUFAgL1lYCiAjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKICMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKQEAgLTgyLDcgKzgyLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpY3V1Yy5saWIgL25vbG9nbyAvYmFzZToiMHgxMDAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnL0lYVXRpbC5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciIC9saWJwYXRoOiJcSUNVXExpYlxEZWJ1ZyIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpY3V1Yy5saWIgL25vbG9nbyAvYmFzZToiMHgxMDAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnL0lYVXRpbC5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciIC9saWJwYXRoOiJcaWN1XzFfM18xXExpYlxEZWJ1ZyIKICMgU1VCVFJBQ1QgTElOSzMyIC9wcm9maWxlCiAKICFFTkRJRiAKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTUNvdW50L0RPTUNvdW50LmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTUNvdW50L0RPTUNvdW50LmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTI1MDIyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvRE9NQ291bnQvRE9NQ291bnQuZHNwCkBAIC0wLDAgKzEsOTYgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iRE9NQ291bnQiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1ET01Db3VudCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIkRPTUNvdW50Lm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRE9NQ291bnQubWFrIiBDRkc9IkRPTUNvdW50IC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiRE9NQ291bnQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIkRPTUNvdW50IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiRE9NQ291bnQgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiRE9NQ291bnQgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIkRPTUNvdW50IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiRE9NQ291bnQgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcRE9NQ291bnRcRE9NQ291bnQuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xET01Db3VudFxET01Db3VudC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTU1lbVRlc3QvRE9NTWVtVGVzdC5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01NZW1UZXN0L0RPTU1lbVRlc3QuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYjE2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01NZW1UZXN0L0RPTU1lbVRlc3QuZHNwCkBAIC0wLDAgKzEsMTA0IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IkRPTU1lbVRlc3QiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1ET01NZW1UZXN0IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRE9NTWVtVGVzdC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIkRPTU1lbVRlc3QubWFrIiBDRkc9IkRPTU1lbVRlc3QgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJET01NZW1UZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJET01NZW1UZXN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiRE9NTWVtVGVzdCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZVxvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvVzMgL0dYIC9PMiAvT2IyIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiRE9NTWVtVGVzdCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL0daIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIkRPTU1lbVRlc3QgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJET01NZW1UZXN0IC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHRlc3RzXERPTVxET01NZW1UZXN0XERPTU1lbVRlc3QuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTVByaW50L0RPTVByaW50LmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTVByaW50L0RPTVByaW50LmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTFjYzA5Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvRE9NUHJpbnQvRE9NUHJpbnQuZHNwCkBAIC0wLDAgKzEsMTA0IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IkRPTVByaW50IiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9RE9NUHJpbnQgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJET01QcmludC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIkRPTVByaW50Lm1hayIgQ0ZHPSJET01QcmludCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIkRPTVByaW50IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJET01QcmludCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIkRPTVByaW50IC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOnllcyAvbWFjaGluZTpJMzg2IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIkRPTVByaW50IC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWdcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246My4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJET01QcmludCAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIkRPTVByaW50IC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXERPTVByaW50XERPTVByaW50LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcRE9NUHJpbnRcRE9NUHJpbnQuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xET01QcmludFxEb21UcmVlRXJyb3JSZXBvcnRlci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXERPTVByaW50XERvbVRyZWVFcnJvclJlcG9ydGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvRE9NVGVzdC9ET01UZXN0LmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTVRlc3QvRE9NVGVzdC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzNjcyOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTVRlc3QvRE9NVGVzdC5kc3AKQEAgLTAsMCArMSwxMDcgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iRE9NVGVzdCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPURPTVRlc3QgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJET01UZXN0Lm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRE9NVGVzdC5tYWsiIENGRz0iRE9NVGVzdCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIkRPTVRlc3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIkRPTVRlc3QgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJET01UZXN0IC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJET01UZXN0IC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWdcb2JqIgorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9HWiAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJET01UZXN0IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiRE9NVGVzdCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlx0ZXN0c1xET01cRE9NVGVzdFxEVGVzdC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlx0ZXN0c1xET01cRE9NVGVzdFxEVGVzdC5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0VudW1WYWwvRW51bVZhbC5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9FbnVtVmFsL0VudW1WYWwuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYmI3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9FbnVtVmFsL0VudW1WYWwuZHNwCkBAIC0wLDAgKzEsOTIgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iRW51bVZhbCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPUVudW1WYWwgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJFbnVtVmFsLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRW51bVZhbC5tYWsiIENGRz0iRW51bVZhbCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIkVudW1WYWwgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIkVudW1WYWwgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJFbnVtVmFsIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOnllcyAvbWFjaGluZTpJMzg2IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIkVudW1WYWwgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIkVudW1WYWwgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJFbnVtVmFsIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXEVudW1WYWxcRW51bVZhbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL01lbVBhcnNlL01lbVBhcnNlLmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL01lbVBhcnNlL01lbVBhcnNlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM3Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvTWVtUGFyc2UvTWVtUGFyc2UuZHNwCkBAIC0wLDAgKzEsMTA0IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Ik1lbVBhcnNlIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9TWVtUGFyc2UgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJNZW1QYXJzZS5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIk1lbVBhcnNlLm1hayIgQ0ZHPSJNZW1QYXJzZSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIk1lbVBhcnNlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJNZW1QYXJzZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIk1lbVBhcnNlIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOnllcyAvbWFjaGluZTpJMzg2IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIk1lbVBhcnNlIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWdcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJNZW1QYXJzZSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIk1lbVBhcnNlIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXE1lbVBhcnNlXE1lbVBhcnNlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcTWVtUGFyc2VcTWVtUGFyc2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xNZW1QYXJzZVxNZW1QYXJzZUhhbmRsZXJzLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcTWVtUGFyc2VcTWVtUGFyc2VIYW5kbGVycy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1BQYXJzZS9QUGFyc2UuZHNwIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvUFBhcnNlL1BQYXJzZS5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhZjkxMwotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1BQYXJzZS9QUGFyc2UuZHNwCkBAIC0wLDAgKzEsMTE2IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IlBQYXJzZSIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPVBQYXJzZSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlBQYXJzZS5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlBQYXJzZS5tYWsiIENGRz0iUFBhcnNlIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiUFBhcnNlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJQUGFyc2UgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJQUGFyc2UgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiUFBhcnNlIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWdcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvR1ogL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIlBQYXJzZSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIlBQYXJzZSAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFBQYXJzZVxQUGFyc2UuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xQUGFyc2VcUFBhcnNlSGFuZGxlcnMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xQUGFyc2VcUFBhcnNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcUFBhcnNlXFBQYXJzZUhhbmRsZXJzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisjIEVuZCBHcm91cAorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9SZWRpcmVjdC9SZWRpcmVjdC5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9SZWRpcmVjdC9SZWRpcmVjdC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk1ZWQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1JlZGlyZWN0L1JlZGlyZWN0LmRzcApAQCAtMCwwICsxLDEwNCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJSZWRpcmVjdCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPVJlZGlyZWN0IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiUmVkaXJlY3QubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJSZWRpcmVjdC5tYWsiIENGRz0iUmVkaXJlY3QgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJSZWRpcmVjdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAiUmVkaXJlY3QgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJSZWRpcmVjdCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZVxvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiUmVkaXJlY3QgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIlJlZGlyZWN0IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiUmVkaXJlY3QgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcUmVkaXJlY3RcUmVkaXJlY3QuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xSZWRpcmVjdFxSZWRpcmVjdC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFJlZGlyZWN0XFJlZGlyZWN0SGFuZGxlcnMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xSZWRpcmVjdFxSZWRpcmVjdEhhbmRsZXJzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU0FYQ291bnQvU0FYQ291bnQuZHNwIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU0FYQ291bnQvU0FYQ291bnQuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjFjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhDb3VudC9TQVhDb3VudC5kc3AKQEAgLTAsMCArMSwxMDQgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iU0FYQ291bnQiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1TQVhDb3VudCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlNBWENvdW50Lm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiU0FYQ291bnQubWFrIiBDRkc9IlNBWENvdW50IC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiU0FYQ291bnQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIlNBWENvdW50IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiU0FYQ291bnQgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiU0FYQ291bnQgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIlNBWENvdW50IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiU0FYQ291bnQgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcU0FYQ291bnRcU0FYQ291bnQuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xTQVhDb3VudFxTQVhDb3VudC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFNBWENvdW50XFNBWENvdW50SGFuZGxlcnMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xTQVhDb3VudFxTQVhDb3VudEhhbmRsZXJzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU0FYUHJpbnQvU0FYUHJpbnQuZHNwIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU0FYUHJpbnQvU0FYUHJpbnQuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTNhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhQcmludC9TQVhQcmludC5kc3AKQEAgLTAsMCArMSwxMDQgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iU0FYUHJpbnQiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1TQVhQcmludCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlNBWFByaW50Lm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiU0FYUHJpbnQubWFrIiBDRkc9IlNBWFByaW50IC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiU0FYUHJpbnQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIlNBWFByaW50IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiU0FYUHJpbnQgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiU0FYUHJpbnQgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIlNBWFByaW50IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiU0FYUHJpbnQgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcU0FYUHJpbnRcU0FYUHJpbnQuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xTQVhQcmludFxTQVhQcmludC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFNBWFByaW50XFNBWFByaW50SGFuZGxlcnMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xTQVhQcmludFxTQVhQcmludEhhbmRsZXJzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU3RkSW5QYXJzZS9TdGRJblBhcnNlLmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1N0ZEluUGFyc2UvU3RkSW5QYXJzZS5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljMzcyMQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1N0ZEluUGFyc2UvU3RkSW5QYXJzZS5kc3AKQEAgLTAsMCArMSwxMTYgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iU3RkSW5QYXJzZSIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPVN0ZEluUGFyc2UgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJTdGRJblBhcnNlLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiU3RkSW5QYXJzZS5tYWsiIENGRz0iU3RkSW5QYXJzZSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIlN0ZEluUGFyc2UgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIlN0ZEluUGFyc2UgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJTdGRJblBhcnNlIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOnllcyAvbWFjaGluZTpJMzg2IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlN0ZEluUGFyc2UgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9HWiAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjMuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiU3RkSW5QYXJzZSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIlN0ZEluUGFyc2UgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0IgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xTdGRJblBhcnNlXFN0ZEluUGFyc2UuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xTdGRJblBhcnNlXFN0ZEluUGFyc2VIYW5kbGVycy5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFN0ZEluUGFyc2VcU3RkSW5QYXJzZS5IcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFN0ZEluUGFyc2VcU3RkSW5QYXJzZUhhbmRsZXJzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisjIEVuZCBHcm91cAorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9YZXJjZXNMaWIvWGVyY2VzTGliLmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1hlcmNlc0xpYi9YZXJjZXNMaWIuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNDc5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9YZXJjZXNMaWIvWGVyY2VzTGliLmRzcApAQCAtMCwwICsxLDExNTMgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iWGVyY2VzTGliIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPVhlcmNlc0xpYiAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlhlcmNlc0xpYi5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlhlcmNlc0xpYi5tYWsiIENGRz0iWGVyY2VzTGliIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiWGVyY2VzTGliIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAiWGVyY2VzTGliIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiWGVyY2VzTGliIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1phIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXHNyYyIgL0kgIi4uXC4uXHNyY1xkb20iIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJQUk9KX1hNTFBBUlNFUiIgL0QgIlBST0pfWE1MVVRJTCIgL0QgIlBST0pfUEFSU0VSUyIgL0QgIlBST0pfU0FYNEMiIC9EICJQUk9KX0RPTSIgL0QgIlBST0pfVkFMSURBVE9SUyIgL0QgIlhNTF9TSU5HTEVETEwiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0QgIlhNTF9VU0VfV0lOMzJfVFJBTlNDT0RFUiIgL0QgIlhNTF9VU0VfV0lOMzJfTVNHTE9BREVSIiAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDEwMDAwMDAwIiAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2luY3JlbWVudGFsOnllcyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlXHhlcmNlcy1jXzFfMC5kbGwiIC9pbXBsaWI6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlL3hlcmNlcy1jXzEubGliIgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJYZXJjZXNMaWIgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvWmEgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi5cLi5cc3JjIiAvSSAiLi5cLi5cc3JjXGRvbSIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIlBST0pfWE1MUEFSU0VSIiAvRCAiUFJPSl9YTUxVVElMIiAvRCAiUFJPSl9QQVJTRVJTIiAvRCAiUFJPSl9TQVg0QyIgL0QgIlBST0pfRE9NIiAvRCAiUFJPSl9WQUxJREFUT1JTIiAvRCAiWE1MX1NJTkdMRURMTCIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfVVNFX1dJTjMyX1RSQU5TQ09ERVIiIC9EICJYTUxfVVNFX1dJTjMyX01TR0xPQURFUiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDEwMDAwMDAwIiAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnL3hlcmNlcy1jXzFfMC5kbGwiIC9pbXBsaWI6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Zy94ZXJjZXMtY18xLmxpYiIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJYZXJjZXNMaWIgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJYZXJjZXNMaWIgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gR3JvdXAgInV0aWwiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiLmNwcCwuaHBwIgorIyBCZWdpbiBHcm91cCAiV2luMzIiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiLmNwcCwuaHBwIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcUGxhdGZvcm1zXFdpbjMyXHJlc291cmNlLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxQbGF0Zm9ybXNcV2luMzJcV2luMzJEZWZzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFBsYXRmb3Jtc1xXaW4zMlxXaW4zMlBsYXRmb3JtVXRpbHMuY3BwCisjIEFERCBDUFAgL1plCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIk1zZ0xvYWRlcnMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiLmNwcCwuaHBwIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcTXNnTG9hZGVyc1xJbk1lbW9yeVxDcHBFcnJNc2dzX0VOX1VTLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXE1zZ0xvYWRlcnNcV2luMzJcV2luMzJNc2dMb2FkZXIuQ3BwCisjIEFERCBDUFAgL1plCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlRyYW5zY29kZXJzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIi5jcHAsLmhwcCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFRyYW5zY29kZXJzXFdpbjMyXFdpbjMyVHJhbnNTZXJ2aWNlLmNwcAorIyBBREQgQ1BQIC9aZQorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFRyYW5zY29kZXJzXFdpbjMyXFdpbjMyVHJhbnNTZXJ2aWNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQXV0b1NlbnNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEJpbkZpbGVJbnB1dFN0cmVhbS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxCaW5GaWxlSW5wdXRTdHJlYW0uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQmluSW5wdXRTdHJlYW0uY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQmluSW5wdXRTdHJlYW0uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQmluTWVtSW5wdXRTdHJlYW0uY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQmluTWVtSW5wdXRTdHJlYW0uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQml0T3BzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEJpdFNldC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxCaXRTZXQuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQ291bnRlZFBvaW50ZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcRW1wdHlTdGFja0V4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxGbGFnSmFuaXRvci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxIZWFkZXJEdW1teS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcSW52YWxpZENhc3RFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcSU9FeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcSmFuaXRvci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxLZXlWYWx1ZVBhaXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcS1ZTdHJpbmdQYWlyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEtWU3RyaW5nUGFpci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxNdXRleGVzLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXE11dGV4ZXMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcTmFtZUlkUG9vbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxOb0RlZlRyYW5zY29kZXJFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcTm9TdWNoRWxlbWVudEV4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxOdWxsUG9pbnRlckV4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxQbGF0Zm9ybVV0aWxzLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFBsYXRmb3JtVXRpbHMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcUmVmQXJyYXlPZi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxSZWZIYXNoVGFibGVPZi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxSZWZTdGFja09mLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFJlZlZlY3Rvck9mLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFJ1bnRpbWVFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcU3RkT3V0LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFN0ZE91dC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxTdHJpbmdQb29sLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFN0cmluZ1Bvb2wuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVGV4dE91dHB1dFN0cmVhbS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxUZXh0T3V0cHV0U3RyZWFtLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFRyYW5zY29kaW5nRXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFRyYW5zU2VydmljZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxVbmV4cGVjdGVkRU9GRXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVVJMLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFVSTC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxVVEZEYXRhRm9ybWF0RXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFZhbHVlQXJyYXlPZi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxWYWx1ZVN0YWNrT2YuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVmFsdWVWZWN0b3JPZi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxYTUw0Q0RlZnMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcWE1MRW51bWVyYXRvci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxYTUxFeGNlcHRpb24uY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcWE1MRXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFhNTEV4Y2VwdE1zZ3MuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcWE1MTXNnTG9hZGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFhNTFN0cmluZy5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxYTUxTdHJpbmcuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcWE1MVW5pLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFhNTFVuaS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiZnJhbWV3b3JrIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQXR0RGVmLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQXR0RGVmLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQXR0RGVmTGlzdC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTEF0dHIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxBdHRyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQnVmZmVyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQnVmZmVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQnVmZmVyTWdyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQnVmZmVyTWdyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQ29udGVudE1vZGVsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQ29udGVudE1vZGVsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MRG9jdW1lbnRIYW5kbGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MRWxlbWVudERlY2wuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxFbGVtZW50RGVjbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTEVudGl0eURlY2wuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxFbnRpdHlEZWNsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MRW50aXR5SGFuZGxlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTEVycm9yQ29kZXMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxOb3RhdGlvbkRlY2wuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxOb3RhdGlvbkRlY2wuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxSZWNvZ25pemVyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MUmVjb2duaXplci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTFJlZkluZm8uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxWYWxpZGF0b3IuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxWYWxpZGF0b3IuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgImludGVybmFsIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIi5jcHAsLmhwcCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxDaGFyVHlwZVRhYmxlcy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcRWxlbVN0YWNrLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxFbGVtU3RhY2suaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXEVuZE9mRW50aXR5RXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxNZW1CdWZJbnB1dFNvdXJjZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcTWVtQnVmSW5wdXRTb3VyY2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXFJlYWRlck1nci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcUmVhZGVyTWdyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxTdGRJbklucHV0U291cmNlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxTdGRJbklucHV0U291cmNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxVUkxJbnB1dFNvdXJjZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcVVJMSW5wdXRTb3VyY2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXFZlY0F0dHJMaXN0SW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcVmVjQXR0ckxpc3RJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxYTUxSZWFkZXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXFhNTFJlYWRlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcWE1MU2Nhbm5lci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcWE1MU2Nhbm5lci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcWE1MU2Nhbm5lcjIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgInNheCIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICIuY3BwLC5ocHAiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XEF0dHJpYnV0ZUxpc3QuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxEb2N1bWVudEhhbmRsZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxEVERIYW5kbGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xzYXhcRHVtbXkuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxFbnRpdHlSZXNvbHZlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XEVycm9ySGFuZGxlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XEhhbmRsZXJCYXNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xzYXhcSW5wdXRTb3VyY2UuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxJbnB1dFNvdXJjZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XExvY2F0b3IuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxQYXJzZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxTQVhFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxTQVhQYXJzZUV4Y2VwdGlvbi5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XFNBWFBhcnNlRXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJwYXJzZXJzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIi5jcHAsLmhwcCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xwYXJzZXJzXERPTVBhcnNlci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNccGFyc2Vyc1xET01QYXJzZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHBhcnNlcnNcU0FYUGFyc2VyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xwYXJzZXJzXFNBWFBhcnNlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiZG9tIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIi5jcHAsLmhwcCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cQXR0ckltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxBdHRySW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXENEQVRBU2VjdGlvbkltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxDREFUQVNlY3Rpb25JbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cQ2hhcmFjdGVyRGF0YUltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxDaGFyYWN0ZXJEYXRhSW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXENvbW1lbnRJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cQ29tbWVudEltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEZWVwTm9kZUxpc3RJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRGVlcE5vZGVMaXN0SW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERvY3VtZW50RnJhZ21lbnRJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRG9jdW1lbnRGcmFnbWVudEltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEb2N1bWVudEltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEb2N1bWVudEltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEb2N1bWVudFR5cGVJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRG9jdW1lbnRUeXBlSW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9BdHRyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0F0dHIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fQ0RBVEFTZWN0aW9uLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0NEQVRBU2VjdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9DaGFyYWN0ZXJEYXRhLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0NoYXJhY3RlckRhdGEuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fQ29tbWVudC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Db21tZW50LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0RvY3VtZW50LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0RvY3VtZW50LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0RvY3VtZW50RnJhZ21lbnQuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRG9jdW1lbnRGcmFnbWVudC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Eb2N1bWVudFR5cGUuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRG9jdW1lbnRUeXBlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0RPTUV4Y2VwdGlvbi5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9ET01FeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRE9NSW1wbGVtZW50YXRpb24uY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRE9NSW1wbGVtZW50YXRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRWxlbWVudC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9FbGVtZW50LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0VudGl0eS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9FbnRpdHkuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRW50aXR5UmVmZXJlbmNlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0VudGl0eVJlZmVyZW5jZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9OYW1lZE5vZGVNYXAuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fTmFtZWROb2RlTWFwLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05vZGUuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fTm9kZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Ob2RlRmlsdGVyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05vZGVGaWx0ZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fTm9kZUl0ZXJhdG9yLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05vZGVJdGVyYXRvci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Ob2RlTGlzdC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Ob2RlTGlzdC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Ob3RhdGlvbi5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Ob3RhdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fUHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX1RleHQuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fVGV4dC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9UcmVlV2Fsa2VyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX1RyZWVXYWxrZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEb21NZW1EZWJ1Zy5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERvbU1lbURlYnVnLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NU3RyaW5nLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NU3RyaW5nLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRFN0cmluZ1Bvb2wuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEU3RyaW5nUG9vbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXEVsZW1lbnREZWZpbml0aW9uSW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXEVsZW1lbnREZWZpbml0aW9uSW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXEVsZW1lbnRJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRWxlbWVudEltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxFbnRpdHlJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRW50aXR5SW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXEVudGl0eVJlZmVyZW5jZUltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxFbnRpdHlSZWZlcmVuY2VJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTWVtRGVidWcuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOYW1lZE5vZGVNYXBJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTmFtZWROb2RlTWFwSW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5hbWVOb2RlRmlsdGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm9kZUZpbHRlckltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOb2RlRmlsdGVySW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5vZGVJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm9kZUltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOb2RlSXRlcmF0b3JJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm9kZUl0ZXJhdG9ySW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5vZGVMaXN0SW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5vZGVMaXN0SW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5vZGVWZWN0b3IuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOb2RlVmVjdG9yLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm90YXRpb25JbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm90YXRpb25JbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxSZWZDb3VudGVkSW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXFJlZkNvdW50ZWRJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cVGV4dEltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxUZXh0SW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXFRyZWVXYWxrZXJJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cVHJlZVdhbGtlckltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgInZhbGlkYXRvcnMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiLmNwcCwuaHBwIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXENNQmluYXJ5T3AuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXENNQmluYXJ5T3AuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXENNTGVhZi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcQ01Ob2RlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxDTVN0YXRlU2V0LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxDTVVuYXJ5T3AuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXENNVW5hcnlPcC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcQ29udGVudFNwZWNOb2RlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxDb250ZW50U3BlY05vZGUuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERGQUNvbnRlbnRNb2RlbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcREZBQ29udGVudE1vZGVsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxEb2NUeXBlSGFuZGxlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcRFREQXR0RGVmLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxEVERBdHREZWYuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERUREF0dERlZkxpc3QuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERUREF0dERlZkxpc3QuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERUREVsZW1lbnREZWNsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxEVERFbGVtZW50RGVjbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcRFRERW50aXR5RGVjbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcRFREVmFsaWRhdG9yLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxEVERWYWxpZGF0b3IuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERURFZhbGlkYXRvcjIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXE1peGVkQ29udGVudE1vZGVsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxNaXhlZENvbnRlbnRNb2RlbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcU2ltcGxlQ29udGVudE1vZGVsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxTaW1wbGVDb250ZW50TW9kZWwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFBsYXRmb3Jtc1xXaW4zMlxWZXJzaW9uLnJjCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC94ZXJjZXMtYWxsLmRzdyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL3hlcmNlcy1hbGwuZHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2U1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC94ZXJjZXMtYWxsLmRzdwpAQCAtMCwwICsxLDE5NCBAQAorTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIkRPTUNvdW50Ij0iLlxET01Db3VudFxET01Db3VudC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIFhlcmNlc0xpYgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJET01NZW1UZXN0Ij0iLlxET01NZW1UZXN0XERPTU1lbVRlc3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBYZXJjZXNMaWIKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiRE9NUHJpbnQiPSIuXERPTVByaW50XERPTVByaW50LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgWGVyY2VzTGliCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIkRPTVRlc3QiPSIuXERPTVRlc3RcRE9NVGVzdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIFhlcmNlc0xpYgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJFbnVtVmFsIj0iLlxFbnVtVmFsXEVudW1WYWwuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBYZXJjZXNMaWIKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiTWVtUGFyc2UiPSIuXE1lbVBhcnNlXE1lbVBhcnNlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgWGVyY2VzTGliCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIlBQYXJzZSI9Ii5cUFBhcnNlXFBQYXJzZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIFhlcmNlc0xpYgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJSZWRpcmVjdCI9Ii5cUmVkaXJlY3RcUmVkaXJlY3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBYZXJjZXNMaWIKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiU0FYQ291bnQiPSIuXFNBWENvdW50XFNBWENvdW50LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgWGVyY2VzTGliCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIlNBWFByaW50Ij0iLlxTQVhQcmludFxTQVhQcmludC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIFhlcmNlc0xpYgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJTdGRJblBhcnNlIj0iLlxTdGRJblBhcnNlXFN0ZEluUGFyc2UuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBYZXJjZXNMaWIKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiWGVyY2VzTGliIj0iLlxYZXJjZXNMaWJcWGVyY2VzTGliLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworR2xvYmFsOgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08Mz4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwpkaWZmIC0tZ2l0IGEvU1RBVFVTIGIvU1RBVFVTCmluZGV4IDFiMmU5OTUuLmZkZDY1MjggMTAwNjQ0Ci0tLSBhL1NUQVRVUworKysgYi9TVEFUVVMKQEAgLTEsMyArMSwyMSBAQAorWGVyY2VzLUMgdmVyc2lvbiAxLjAuMSAxNS1EZWMtOTkKKyAgLSBQb3J0IHRvIFNvbGFyaXMuCisgIC0gSW1wcm92ZWQgZXJyb3IgcmVjb3ZlcnkgYW5kIGNsYXJpZmllZCBlcnJvciBtZXNzYWdlcy4KKyAgLSBBZGRlZCBET01UZXN0IHByb2dyYW0uCisKKworWGVyY2VzLUMgdmVyc2lvbiAxLjAuMCAgOC1EZWMtOTkKKyAgLSBTb3VyY2VzIGZvcjogV2luTlQvOTgoVmlzdWFsIEMrKyksICBMaW51eChnY2MpLCBBSVggKHhsQyksIAorICAgIEhQLVVYIDEwLjIgKGFDQyBhbmQgQ0MpIGFuZCBIUC1VWCAxMS4wIChhQ0MgYW5kIENDKQorICAtIEhhcyBkZWZlY3QgZml4ZXMsIGJldHRlciBjb25mb3JtYW5jZSwgYmV0dGVyIHNwZWVkIGFuZCBjbGVhbmVyCisgICAgaW50ZXJuYWwgaW50ZXJuYWwgYXJjaGl0ZWN0dXJlIAorICAtIFRocmVlIG5ldyBzYW1wbGVzIGFkZGVkOiBQUGFyc2UsIFN0ZEluUGFyc2UgYW5kIEVudW1WYWwgCisgIC0gTG9hZGFibGUgbWVzc2FnZSB0ZXh0IGVuYWJsaW5nIGZ1dHVyZSB0cmFuc2xhdGlvbnMgdG8gYmUgZWFzaWx5CisgICAgcGx1Z2dlZC1pbiAKKyAgLSBQbHVnZ2FibGUgdmFsaWRhdG9ycyAKKyAgLSBQbHVnZ2FibGUgdHJhbnNjb2RlcnMgCisKKwogWGVyY2VzLWMgc3RhdHVzICA4LU5vdi05OQogCiBUaGlzIGRyb3Agb2YgWGVyY2VzLWMgaXMgYmFzZWQgb24gYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBJQk0gWE1MNEMKZGlmZiAtLWdpdCBhL29iai9NYWtlZmlsZS5pbiBiL29iai9NYWtlZmlsZS5pbgppbmRleCA2N2Q5ZjY3Li40NTk5YTRjIDEwMDY0NAotLS0gYS9vYmovTWFrZWZpbGUuaW4KKysrIGIvb2JqL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwzNiBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjEwOjQ5ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjcgIDE5OTkvMTIvMjAgMjM6MDQ6NTEgIGFydW5hMQorIyAidHJhbnNjb2RlciBpbmZvcm1hdGlvbiB0cmFuc2ZlcnJlZCIKKyMKKyMgUmV2aXNpb24gMS42ICAxOTk5LzEyLzE3IDAxOjI4OjUyICByYWh1bGoKKyMgTWVyZ2VkIGluIGNoYW5nZXMgc3VibWl0dGVkIGZvciBVbml4V2FyZSA3IHBvcnQuIFBsYXRmb3JtCisjIHNwZWNpZmljIGZpbGVzIGFyZSBzdGlsbCBtaXNzaW5nLgorIworIyBSZXZpc2lvbiAxLjUgIDE5OTkvMTIvMTQgMjM6NTM6MTcgIHJhaHVsagorIyBSZW1vdmVkIHRoZSBvZmZlbmRpbmcgQ3RybC1NJ3MgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UKKyMgbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyMKKyMgUFI6CisjIE9idGFpbmVkIGZyb206CisjIFN1Ym1pdHRlZCBieToKKyMgUmV2aWV3ZWQgYnk6CisjCisjIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8yNCAyMzoyMTo0MiAgcmFodWxqCisjIE5vdyB3b3JrcyB1bmRlciBIUFVYIDEwLjIwIHdpdGggQ0MgYW5kIGFDQywgd2l0aCBJQ1UgYW5kIG5hdGl2ZQorIyBkaXN0Y2xlYW4gdGFyZ2V0IG5vdyByZW1vdmUgYW5kIHJlbWFpbmluZyBNYWtlZmlsZShzKQorIyBjbGVhbiB0YXJnZXQgbm93IHJlbW92ZXMgdGhlIHRlbXBsYXRlIHJlcG9zaXRvcnkgZGlyZWN0b3J5CisjCisjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8yMyAwMTo1OToxNiAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KKyMgUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAyMDozODo0MyAgcmFodWxqCisjIFJlcGxhY2VkIFhNTDRDUk9PVCB3aXRoIFhFUkNFU0NST09ULgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjEwOjQ5ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0MzoxNCAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzQsMjEgKzEwMiwyNiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIFBSRUZJWCA9IEBwcmVmaXhACitMREZMQUdTID0gQGxkZmxhZ3NACitMSUJTID0gQGxpYnNACitPU1ZFUiA9IEBvc3ZlckAKK1RSQU5TQ09ERVIgPSBAdHJhbnNjb2RlckAKIAogaW5jbHVkZSAuLi9zcmMvTWFrZWZpbGUuaW5jbAogCi1MSUI9JHtYTUw0Q1JPT1R9L2xpYgorTElCPSR7WEVSQ0VTQ1JPT1R9L2xpYgogIyMgT1MzOTBCQVRDSAogaWZlcSAoJHtPUzM5MEJBVENIfSwxKQogQkFUQ0hfVEFSR0VUID0gIi8vJyR7TE9BRE1PRH0oWE1MNEMzMCknIgogZW5kaWYKLUxJQk5BTUU9bGliSVhYTUw0QworTElCTkFNRT1saWJ4ZXJjZXMtYwogVEhJU0xJQj0ke0xJQn0vJHtMSUJOQU1FfQotVkVSPTNfMAorVkVSPTFfMAogCi1BTExfT0JKRUNUU19ESVI9JHtYTUw0Q1JPT1R9L29iagorQUxMX09CSkVDVFNfRElSPSR7WEVSQ0VTQ1JPT1R9L29iagogQUxMX09CSkVDVFM9JCh3aWxkY2FyZCAkKEFMTF9PQkpFQ1RTX0RJUikvKi5vKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMDMsOCArMTM2LDkgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogaWZlcSAoJHtQTEFURk9STX0sSFBVWCkKLSAgaWZlcSAoJHtDT01QSUxFUn0sQ0MpCisgIGlmZXEgKCR7Q1hYfSxDQykKICAgICAjIyMjIyMgIFN0YXJ0IEhQLVVYICBDQyBjb21waWxlciBzcGVjaWZpYyBzdHVmZiAjIyMjIyMjCisKICAgICBEVU1NWUVYRT0kKFhNTF9MSUJfRElSKS9kdW1teUV4ZQogICAgIFRFTVBMQVRFU09CSlM9JCh3aWxkY2FyZCAkKFRFTVBMQVRFU1JFUE9TSVRPUlkpLyoubykKIApAQCAtMTEyLDE2ICsxNDYsMTcgQEAKIAlccm0gLWYgJChEVU1NWUVYRSkKIAogICAgICQoRFVNTVlFWEUpOiAkKEFMTF9PQkpFQ1RTKQotCSR7TUFLRV9TSEFSRUR9IC1vICR7QH0gJChQTEFURk9STV9MSUJSQVJJRVMpICReICQoQUxMTElCUykKKwkke01BS0VfU0hBUkVEfSAtbyAke0B9ICReICQoUExBVEZPUk1fTElCUkFSSUVTKSAkKEFMTExJQlMpCiAKICAgICAjIyMjIyMgIEVuZCBIUC1VWCAgQ0MgY29tcGlsZXIgc3BlY2lmaWMgc3R1ZmYgIyMjIyMjIwogICBlbHNlCiAgICAgYWxsOiAke1RISVNMSUJ9JHtWRVJ9JHtTSExJQlNVRkZJWH0KICAgZW5kaWYKIGVsc2UKLSMjIE9TMzkwQkFUQ0gKKyAgICMjIFN0YXJ0IE9TMzkwQkFUQ0ggIyMKICAgaWZlcSAoJHtPUzM5MEJBVENIfSwxKQogYWxsOiAke0JBVENIX1RBUkdFVH0KKyAgICMjIEVuZCBPUzM5MEJBVENIICMjCiAgIGVsc2UKIGFsbDogJHtUSElTTElCfSR7VkVSfSR7U0hMSUJTVUZGSVh9CiAgIGVuZGlmCkBAIC0xNDEsMjUgKzE3NiwzOSBAQAogCiAke1RISVNMSUJ9JHtWRVJ9JHtTSExJQlNVRkZJWH06CSQoQUxMX09CSkVDVFMpCiAJQGVjaG8gQnVpbGRpbmcgJHtUSElTTElCfSR7VkVSfSR7U0hMSUJTVUZGSVh9Ci0JJHtNQUtFX1NIQVJFRH0gLW8gJHtAfSAkKFBMQVRGT1JNX0xJQlJBUklFUykgJChFWFRSQV9MSU5LX09QVElPTlMpICReICQoVEVNUExBVEVTT0JKUykgJChBTExMSUJTKQotIyMgT1MzOTAKKwkke01BS0VfU0hBUkVEfSAtbyAke0B9ICReICQoVEVNUExBVEVTT0JKUykgJChQTEFURk9STV9MSUJSQVJJRVMpICQoRVhUUkFfTElOS19PUFRJT05TKSAkKEFMTExJQlMpCisjIyBTdGFydCBPUzM5MCAjIwogaWZlcSAoJHtQTEFURk9STX0sT1MzOTApCi0jIyBPUzM5MEJBVENICisjIyBTdGFydCBPUzM5MEJBVENIICMjCiBpZmVxICgke09TMzkwQkFUQ0h9LDEpCiAke0JBVENIX1RBUkdFVH06ICAgICAgICAkKEFMTF9PQkpFQ1RTKQogCUBlY2hvIEJ1aWxkaW5nICR7QkFUQ0hfVEFSR0VUfQotCSR7TUFLRV9TSEFSRUR9IC1vICR7QH0gJChQTEFURk9STV9MSUJSQVJJRVMpICQoRVhUUkFfTElOS19PUFRJT05TKSAkXiAkKFRFTVBMQVRFU09CSlMpICQoQUxMTElCUykKKwkke01BS0VfU0hBUkVEfSAtbyAke0B9ICReICQoVEVNUExBVEVTT0JKUykgJChQTEFURk9STV9MSUJSQVJJRVMpICQoRVhUUkFfTElOS19PUFRJT05TKSAkKEFMTExJQlMpCiBlbHNlCiAJJChDUCkgJHtMSUJOQU1FfSR7VkVSfSR7T1MzOTBTSURFREVDS30gJHtMSUJ9CiBlbmRpZgogZW5kaWYKIAorIyMgRW5kIE9TMzkwIGFuZCBPUzM5MEJBVENICisKKwogY2xlYW46CiAJQGVjaG8gIk1ha2luZyBjbGVhbiBpbiBvYmogLi4uIgogCS1ybSAtZiAkKEFMTF9PQkpFQ1RTKSAke1RISVNMSUJ9JHtWRVJ9JHtTSExJQlNVRkZJWH0KK2lmbmVxICgkc3RyaXAgJChURU1QTEFURVNSRVBPU0lUT1JZKSksKQorCS1ybSAtZiAkKFRFTVBMQVRFU1JFUE9TSVRPUlkpLyoubworCS1ybSAtZiAkKFRFTVBMQVRFU1JFUE9TSVRPUlkpLyouYworCS1ybSAtZiAkKFRFTVBMQVRFU1JFUE9TSVRPUlkpLyouY3MKKwktcm0gLWYgJChURU1QTEFURVNSRVBPU0lUT1JZKS8qLmhlCitlbmRpZgorCiAKIGRpc3RjbGVhbjoJY2xlYW4KIAlybSAtZiBNYWtlZmlsZQoraWZuZXEgKCRzdHJpcCAkKFRFTVBMQVRFU1JFUE9TSVRPUlkpKSwpCisJLXJtIC1yZiAkKFRFTVBMQVRFU1JFUE9TSVRPUlkpCitlbmRpZgorCiAKIGluc3RhbGw6CiBpZmVxICgke09TMzkwQkFUQ0h9LDEpCmRpZmYgLS1naXQgYS9zYW1wbGVzL0RPTUNvdW50L0RPTUNvdW50LmNwcCBiL3NhbXBsZXMvRE9NQ291bnQvRE9NQ291bnQuY3BwCmluZGV4IGIzOWQzNjUuLmRmMmM4OTYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvRE9NQ291bnQvRE9NQ291bnQuY3BwCisrKyBiL3NhbXBsZXMvRE9NQ291bnQvRE9NQ291bnQuY3BwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6NTIgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDAyOjEzOjQwICByYWh1bGoKKyAqIEl0IG5vdyB2YWxpZGF0ZXMgd2hlbiB0aGUgLXYgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjUyICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuOCAgMTk5OS8xMS8wOCAyMDo0MzozNCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTE0Myw2ICsxNDYsNyBAQAogCiAgICAgLy8gSW5zdGFudGlhdGUgdGhlIERPTSBwYXJzZXIuCiAgICAgRE9NUGFyc2VyIHBhcnNlcjsKKyAgICBwYXJzZXIuc2V0RG9WYWxpZGF0aW9uKGRvVmFsaWRhdGlvbik7CiAKICAgICAvLyBBbmQgY3JlYXRlIG91ciBlcnJvciBoYW5kbGVyIGFuZCBpbnN0YWxsIGl0CiAgICAgRE9NQ291bnQgZWxlbWVudENvdW50ZXI7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0RPTUNvdW50L01ha2VmaWxlLmluIGIvc2FtcGxlcy9ET01Db3VudC9NYWtlZmlsZS5pbgppbmRleCAzMzBkNDU2Li5iNmVmYTEyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0RPTUNvdW50L01ha2VmaWxlLmluCisrKyBiL3NhbXBsZXMvRE9NQ291bnQvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDExIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6NTMgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAyMDozNDozMSAgcmFodWxqCisjIFJlcGxhY2VkIFhNTDRDUk9PVCB3aXRoIFhFUkNFU0NST09ULgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjUzICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0MzozNSAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODMsMTAgKzg2LDEwIEBACiAKIEFQUF9OQU1FPURPTUNvdW50CiAKLU9VVERJUj0gJHtYTUw0Q1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KLUVYRUM9CSR7WE1MNENST09UfS9iaW4KK09VVERJUj0gJHtYRVJDRVNDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQorRVhFQz0JJHtYRVJDRVNDUk9PVH0vYmluCiBPQkpTPQkke09VVERJUn0vRE9NQ291bnQubwotU1JDPQkke1hNTDRDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQorU1JDPQkke1hFUkNFU0NST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CiAKICMjIE9TMzkwQkFUQ0gKIGlmZXEgKCR7T1MzOTBCQVRDSH0sMSkKZGlmZiAtLWdpdCBhL3NhbXBsZXMvRE9NUHJpbnQvRE9NUHJpbnQuY3BwIGIvc2FtcGxlcy9ET01QcmludC9ET01QcmludC5jcHAKaW5kZXggYzllOThmYy4uMTVkY2I5NSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9ET01QcmludC9ET01QcmludC5jcHAKKysrIGIvc2FtcGxlcy9ET01QcmludC9ET01QcmludC5jcHAKQEAgLTU2LDggKzU2LDE3IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTo1MSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMDMgMDA6MTQ6NTIgIGFuZHloCisgKiBSZW1vdmVkIHRyYW5zY29kaW5nIHN0dWZmLCByZXBsYWNlZCB3aXRoIERPTVN0cmluZzo6dHJhbnNjb2RlLgorICoKKyAqIFR3ZWFrZWQgeG1sIGVuY29kaW5nPSBkZWNsYXJhdGlvbiB0byBzYXkgSVNPLTg4NTktMS4gIFN0aWxsIHdyb25nLAorICogYnV0IG5vdCBhcyB3cm9uZyBhcyB1dGYtOAorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAwMjoxNDowNSAgcmFodWxqCisgKiBJdCBub3cgdmFsaWRhdGVzIHdoZW4gdGhlIC12IG9wdGlvbiBpcyBzcGVjaWZpZWQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOTo1MSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjcgIDE5OTkvMTEvMDggMjA6NDM6MzUgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC03OCw2ICs4NywxMyBAQAogLy8gICAgICBmaWxlbmFtZSAgICAgICAgLSBUaGUgcGF0aCB0byB0aGUgWE1MIGZpbGUgdG8gcGFyc2UKIC8vCiAvLyAgVGhlc2UgYXJlIG5vbi1jYXNlIHNlbnNpdGl2ZQorLy8KKy8vICAgTGltaXRhdGlvbnM6CisvLyAgICAgMS4gIFRoZSBlbmNvZGluZz0ieHh4IiBjbGF1c2UgaW4gdGhlIFhNTCBoZWFkZXIgc2hvdWxkIHJlZmxlY3QKKy8vICAgICAgICAgdGhlIHN5c3RlbSBsb2NhbCBjb2RlIHBhZ2UsIGJ1dCBkb2VzIG5vdC4KKy8vICAgICAyLiAgQ2FzZXMgd2hlcmUgdGhlIFhNTCBkYXRhIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBjYW4gbm90CisvLyAgICAgICAgIGJlIHJlcHJlc2VudGVkIGluIHRoZSBzeXN0ZW0gbG9jYWwgY29kZSBwYWdlIGFyZSBub3QgaGFuZGxlZC4KKy8vCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCkBAIC0xMzgsOSArMTU0LDkgQEAKIAogICAgIGNhdGNoKGNvbnN0IFhNTEV4Y2VwdGlvbiYgdG9DYXRjaCkKICAgICB7Ci0gICAgICAgIGNlcnIgPDwgIkVycm9yIGR1cmluZyBYTUw0QzIgSW5pdGlhbGl6YXRpb24uXG4iCisgICAgICAgIGNlcnIgPDwgIkVycm9yIGR1cmluZyBYZXJjZXMtYyBJbml0aWFsaXphdGlvbi5cbiIKICAgICAgICAgICAgICA8PCAiICBFeGNlcHRpb24gbWVzc2FnZToiCi0gICAgICAgICAgICAgPDwgU3RyWCh0b0NhdGNoLmdldE1lc3NhZ2UoKSkgPDwgZW5kbDsKKyAgICAgICAgICAgICA8PCBET01TdHJpbmcodG9DYXRjaC5nZXRNZXNzYWdlKCkpIDw8IGVuZGw7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KIApAQCAtMTk5LDYgKzIxNSw3IEBACiAgICAgLy8gIGRpc2NvdmVycyBlcnJvcnMgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgcGFyc2luZyB0aGUgWE1MIGRvY3VtZW50LgogICAgIC8vCiAgICAgRE9NUGFyc2VyIHBhcnNlcjsKKyAgICBwYXJzZXIuc2V0RG9WYWxpZGF0aW9uKGRvVmFsaWRhdGlvbik7CiAgICAgRXJyb3JIYW5kbGVyICplcnJSZXBvcnRlciA9IG5ldyBET01UcmVlRXJyb3JSZXBvcnRlcigpOwogICAgIHBhcnNlci5zZXRFcnJvckhhbmRsZXIoZXJyUmVwb3J0ZXIpOwogCkBAIC0yMTUsNyArMjMyLDggQEAKICAgICBjYXRjaCAoY29uc3QgWE1MRXhjZXB0aW9uJiBlKQogICAgIHsKICAgICAgICAgY2VyciA8PCAiQW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgcGFyc2luZ1xuICAgTWVzc2FnZTogIgotICAgICAgICAgICAgIDw8IFN0clgoZS5nZXRNZXNzYWdlKCkpIDw8IGVuZGw7CisgICAgICAgICAgICA8PCBET01TdHJpbmcoZS5nZXRNZXNzYWdlKCkpIDw8IGVuZGw7CisgLy8gICAgICAgICAgIDw8IFN0clgoZS5nZXRNZXNzYWdlKCkpIDw8IGVuZGw7CiAgICAgICAgIGVycm9yc09jY3VyZWQgPSB0cnVlOwogICAgIH0KIApAQCAtMjk4LDcgKzMxNiwxMSBAQAogCiAgICAgICAgIGNhc2UgRE9NX05vZGU6OkRPQ1VNRU5UX05PREUgOgogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXQgPDwgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyA/PlxuIjsKKyAgICAgICAgICAgIC8vIEJ1ZyBoZXJlOiAgd2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGdldCB0aGUgZW5jb2RpbmcgbmFtZQorICAgICAgICAgICAgLy8gICBmb3IgdGhlIGRlZmF1bHQgY29kZSBwYWdlIG9uIHRoZSBzeXN0ZW0gd2hlcmUgdGhlCisgICAgICAgICAgICAvLyAgIHByb2dyYW0gaXMgcnVubmluZywgYW5kIHBsdWcgdGhhdCBpbiBmb3IgdGhlIGVuY29kaW5nCisgICAgICAgICAgICAvLyAgIG5hbWUuICAKKyAgICAgICAgICAgIHRhcmdldCA8PCAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nSVNPLTg4NTktMScgPz5cbiI7CiAgICAgICAgICAgICBET01fTm9kZSBjaGlsZCA9IHRvV3JpdGUuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgd2hpbGUoIGNoaWxkICE9IDApCiAgICAgICAgICAgICB7CkBAIC00MjcsNyArNDQ5LDggQEAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm9uZSBvZiB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzLCBwcmludCBpdCBhcyBzdWNoCi0gICAgICAgICAgICAgICAgdGFyZ2V0IDw8IFN0clgoJmNoYXJzW2luZGV4XSwgMSk7CisgICAgICAgICAgICAgICAgLy8gdGFyZ2V0IDw8IFN0clgoJmNoYXJzW2luZGV4XSwgMSk7CisgICAgICAgICAgICAgICAgdGFyZ2V0IDw8IHRvV3JpdGUuc3Vic3RyaW5nRGF0YShpbmRleCwgMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQzOSwxMiArNDYyLDE4IEBACiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLS8vICBvc3RyZWFtIDw8IERPTVN0cmluZyAgICAgIFN0cmVhbSBvdXQgYSBET00gc3RyaW5nLgorLy8gIG9zdHJlYW0gPDwgRE9NU3RyaW5nICAgIFN0cmVhbSBvdXQgYSBET00gc3RyaW5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIERvaW5nIHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBmaXJzdCB0cmFuc2NvZGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjaGFyICogZm9ybSBpbiB0aGUgZGVmYXVsdCBjb2RlIHBhZ2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN5c3RlbQogLy8KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiB0YXJnZXQsIGNvbnN0IERPTVN0cmluZyYgcykKIHsKLSAgICBpZiAocy5sZW5ndGgoKSA+IDApCi0gICAgICAgIHRhcmdldCA8PCBTdHJYKHMucmF3QnVmZmVyKCksIHMubGVuZ3RoKCkpOworICAgIC8vaWYgKHMubGVuZ3RoKCkgPiAwKQorICAgIC8vICAgIHRhcmdldCA8PCBTdHJYKHMucmF3QnVmZmVyKCksIHMubGVuZ3RoKCkpOworICAgIGNoYXIgKnAgPSBzLnRyYW5zY29kZSgpOworICAgIHRhcmdldCA8PCBwOworICAgIGRlbGV0ZSBwOwogICAgIHJldHVybiB0YXJnZXQ7CiB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0RPTVByaW50L0RPTVRyZWVFcnJvclJlcG9ydGVyLmNwcCBiL3NhbXBsZXMvRE9NUHJpbnQvRE9NVHJlZUVycm9yUmVwb3J0ZXIuY3BwCmluZGV4IDhkNzUzNGYuLjgwYmE4Y2EgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvRE9NUHJpbnQvRE9NVHJlZUVycm9yUmVwb3J0ZXIuY3BwCisrKyBiL3NhbXBsZXMvRE9NUHJpbnQvRE9NVHJlZUVycm9yUmVwb3J0ZXIuY3BwCkBAIC01Niw4ICs1NiwxNCBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6NTEgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjE0OjUzICBhbmR5aAorICogUmVtb3ZlZCB0cmFuc2NvZGluZyBzdHVmZiwgcmVwbGFjZWQgd2l0aCBET01TdHJpbmc6OnRyYW5zY29kZS4KKyAqCisgKiBUd2Vha2VkIHhtbCBlbmNvZGluZz0gZGVjbGFyYXRpb24gdG8gc2F5IElTTy04ODU5LTEuICBTdGlsbCB3cm9uZywKKyAqIGJ1dCBub3QgYXMgd3JvbmcgYXMgdXRmLTgKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjUxICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNiAgMTk5OS8xMS8wOCAyMDo0MzozNSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTcyLDYgKzc4LDEwIEBACiAjaW5jbHVkZSA8aW9zdHJlYW0uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxtZW1vcnkuaD4KKyNpbmNsdWRlIDxkb20vRE9NU3RyaW5nLmhwcD4KKworLy8gR2xvYmFsIHN0cmVhbWluZyBvcGVyYXRvciBmb3IgRE9NU3RyaW5nIGlzIGRlZmluZWQgaW4gRE9NUHJpbnQuY3BwCitleHRlcm4gb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiB0YXJnZXQsIGNvbnN0IERPTVN0cmluZyYgcyk7CiAKIAogdm9pZCBET01UcmVlRXJyb3JSZXBvcnRlcjo6d2FybmluZyhjb25zdCBTQVhQYXJzZUV4Y2VwdGlvbiYpCkBAIC04MywxOCArOTMsMTggQEAKIAogdm9pZCBET01UcmVlRXJyb3JSZXBvcnRlcjo6ZXJyb3IoY29uc3QgU0FYUGFyc2VFeGNlcHRpb24mIHRvQ2F0Y2gpCiB7Ci0gICAgY2VyciA8PCAiRXJyb3IgYXQgZmlsZSBcIiIgPDwgU3RyWCh0b0NhdGNoLmdldFN5c3RlbUlkKCkpCisgICAgY2VyciA8PCAiRXJyb3IgYXQgZmlsZSBcIiIgPDwgRE9NU3RyaW5nKHRvQ2F0Y2guZ2V0U3lzdGVtSWQoKSkKIAkJIDw8ICJcIiwgbGluZSAiIDw8IHRvQ2F0Y2guZ2V0TGluZU51bWJlcigpCiAJCSA8PCAiLCBjb2x1bW4gIiA8PCB0b0NhdGNoLmdldENvbHVtbk51bWJlcigpCi0gICAgICAgICA8PCAiXG4gICBNZXNzYWdlOiAiIDw8IFN0clgodG9DYXRjaC5nZXRNZXNzYWdlKCkpIDw8IGVuZGw7CisgICAgICAgICA8PCAiXG4gICBNZXNzYWdlOiAiIDw8IERPTVN0cmluZyh0b0NhdGNoLmdldE1lc3NhZ2UoKSkgPDwgZW5kbDsKIH0KIAogdm9pZCBET01UcmVlRXJyb3JSZXBvcnRlcjo6ZmF0YWxFcnJvcihjb25zdCBTQVhQYXJzZUV4Y2VwdGlvbiYgdG9DYXRjaCkKIHsKLSAgICBjZXJyIDw8ICJGYXRhbCBFcnJvciBhdCBmaWxlIFwiIiA8PCBTdHJYKHRvQ2F0Y2guZ2V0U3lzdGVtSWQoKSkKKyAgICBjZXJyIDw8ICJGYXRhbCBFcnJvciBhdCBmaWxlIFwiIiA8PCBET01TdHJpbmcodG9DYXRjaC5nZXRTeXN0ZW1JZCgpKQogCQkgPDwgIlwiLCBsaW5lICIgPDwgdG9DYXRjaC5nZXRMaW5lTnVtYmVyKCkKIAkJIDw8ICIsIGNvbHVtbiAiIDw8IHRvQ2F0Y2guZ2V0Q29sdW1uTnVtYmVyKCkKLSAgICAgICAgIDw8ICJcbiAgIE1lc3NhZ2U6ICIgPDwgU3RyWCh0b0NhdGNoLmdldE1lc3NhZ2UoKSkgPDwgZW5kbDsKKyAgICAgICAgIDw8ICJcbiAgIE1lc3NhZ2U6ICIgPDwgRE9NU3RyaW5nKHRvQ2F0Y2guZ2V0TWVzc2FnZSgpKSA8PCBlbmRsOwogfQogCiB2b2lkIERPTVRyZWVFcnJvclJlcG9ydGVyOjpyZXNldEVycm9ycygpCkBAIC0xMDMsNzAgKzExMywzIEBACiB9CiAKIAotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBTdHJYOiBQcml2YXRlIGhlbHBlciBtZXRob2RzCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZvaWQgU3RyWDo6dHJhbnNjb2RlKGNvbnN0IFhNTENoKiBjb25zdCB0b1RyYW5zY29kZSwgY29uc3QgdW5zaWduZWQgaW50IGxlbikKLXsKLSAgICAvLyBTaG9ydCBjaXJjdWl0IGlmIGl0cyBhIG51bGwgcG9pbnRlcgotICAgIGlmICghdG9UcmFuc2NvZGUgfHwgKCF0b1RyYW5zY29kZVswXSkpCi0gICAgewotICAgICAgICBmTG9jYWxGb3JtID0gbmV3IGNoYXJbMV07Ci0gICAgICAgIGZMb2NhbEZvcm1bMF0gPSAwOwotICAgICAgICByZXR1cm47Ci0JfQotCi0gICAgLy8gU2VlIGlmIG91ciBYTUxDaCBhbmQgd2NoYXJfdCBhcyB0aGUgc2FtZSBvbiB0aGlzIHBsYXRmb3JtCi0gICAgY29uc3QgYm9vbCBpc1NhbWVTaXplID0gKHNpemVvZihYTUxDaCkgPT0gc2l6ZW9mKHdjaGFyX3QpKTsKLQotICAgIC8vCi0gICAgLy8gIEdldCB0aGUgYWN0dWFsIG51bWJlciBvZiBjaGFycy4gSWYgdGhlIHBhc3NlZCBsZW4gaXMgemVybywgaXRzIG51bGwKLSAgICAvLyAgdGVybWluYXRlZC4gRWxzZSB3ZSBoYXZlIHRvIHVzZSB0aGUgbGVuLgotICAgIC8vCi0gICAgd2NoYXJfdCByZWFsTGVuID0gKHdjaGFyX3QpbGVuOwotICAgIGlmICghcmVhbExlbikKLSAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICBXZSBjYW5ub3QganVzdCBhc3N1bWUgd2UgY2FuIHVzZSB3Y3NsZW4oKSBiZWNhdXNlIHdlIGRvbid0IGtub3cKLSAgICAgICAgLy8gIGlmIG91ciBYTUxDaCBpcyB0aGUgc2FtZSBhcyB3Y2hhcl90IG9uIHRoaXMgcGxhdGZvcm0uCi0gICAgICAgIC8vCi0gICAgICAgIGNvbnN0IFhNTENoKiB0bXBQdHIgPSB0b1RyYW5zY29kZTsKLSAgICAgICAgd2hpbGUgKCoodG1wUHRyKyspKQotICAgICAgICAgICAgcmVhbExlbisrOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gIElmIGVpdGhlciB0aGUgcGFzc2VkIGxlbmd0aCB3YXMgbm9uLXplcm8gb3Igb3VyIGNoYXIgc2l6ZXMgYXJlIG5vdCAKLSAgICAvLyAgc2FtZSwgd2UgaGF2ZSB0byB1c2UgYSB0ZW1wIGJ1ZmZlci4gU2luY2UgdGhpcyBpcyBjb21tb24gaW4gdGhlc2UKLSAgICAvLyAgc2FtcGxlcywgd2UganVzdCBkbyBpdCBhbnl3YXkuCi0gICAgLy8KLSAgICB3Y2hhcl90KiB0bXBTb3VyY2UgPSBuZXcgd2NoYXJfdFtyZWFsTGVuICsgMV07Ci0gICAgaWYgKGlzU2FtZVNpemUpCi0gICAgewotICAgICAgICBtZW1jcHkodG1wU291cmNlLCB0b1RyYW5zY29kZSwgcmVhbExlbiAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgfQotICAgICBlbHNlCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgcmVhbExlbjsgaW5kZXgrKykKLSAgICAgICAgICAgIHRtcFNvdXJjZVtpbmRleF0gPSAod2NoYXJfdCl0b1RyYW5zY29kZVtpbmRleF07Ci0gICAgfQotICAgIHRtcFNvdXJjZVtyZWFsTGVuXSA9IDA7Ci0KLSAgICAvLyBTZWUgbm93IG1hbnkgY2hhcnMgd2UgbmVlZCB0byB0cmFuc2NvZGUgdGhpcyBndXkKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGFyZ2V0TGVuID0gOjp3Y3N0b21icygwLCB0bXBTb3VyY2UsIDApOwotCi0gICAgLy8gQWxsb2NhdGUgb3V0IHN0b3JhZ2UgbWVtYmVyCi0gICAgZkxvY2FsRm9ybSA9IG5ldyBjaGFyW3RhcmdldExlbiArIDFdOwotCi0gICAgLy8KLSAgICAvLyAgQW5kIHRyYW5zY29kZSBvdXIgdGVtcCBzb3VyY2UgYnVmZmVyIHRvIHRoZSBsb2NhbCBidWZmZXIuIENhcCBpdAotICAgIC8vICBvZmYgc2luY2UgdGhlIGNvbnZlcnRlciB3b24ndCBkbyBpdCAoYmVjYXVzZSB0aGUgbnVsbCBpcyBiZXlvbmQKLSAgICAvLyAgd2hlcmUgdGhlIHRhcmdldCB3aWxsIGZpbGwgdXAuKQotICAgIC8vCi0gICAgOjp3Y3N0b21icyhmTG9jYWxGb3JtLCB0bXBTb3VyY2UsIHRhcmdldExlbik7Ci0gICAgZkxvY2FsRm9ybVt0YXJnZXRMZW5dID0gMDsKLQotICAgIC8vIERvbid0IGZvcmdldCB0byBkZWxldGUgb3VyIHRlbXAgYnVmZmVyCi0gICAgZGVsZXRlIFtdIHRtcFNvdXJjZTsKLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvRE9NUHJpbnQvRE9NVHJlZUVycm9yUmVwb3J0ZXIuaHBwIGIvc2FtcGxlcy9ET01QcmludC9ET01UcmVlRXJyb3JSZXBvcnRlci5ocHAKaW5kZXggNzA4NjkxMi4uZTMxNTFkMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9ET01QcmludC9ET01UcmVlRXJyb3JSZXBvcnRlci5ocHAKKysrIGIvc2FtcGxlcy9ET01QcmludC9ET01UcmVlRXJyb3JSZXBvcnRlci5ocHAKQEAgLTU2LDggKzU2LDE0IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTo1MSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MTQ6NTMgIGFuZHloCisgKiBSZW1vdmVkIHRyYW5zY29kaW5nIHN0dWZmLCByZXBsYWNlZCB3aXRoIERPTVN0cmluZzo6dHJhbnNjb2RlLgorICoKKyAqIFR3ZWFrZWQgeG1sIGVuY29kaW5nPSBkZWNsYXJhdGlvbiB0byBzYXkgSVNPLTg4NTktMS4gIFN0aWxsIHdyb25nLAorICogYnV0IG5vdCBhcyB3cm9uZyBhcyB1dGYtOAorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6NTEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQzOjM2ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtOTIsNTggKzk4LDMgQEAKICAgICB2b2lkIHJlc2V0RXJyb3JzKCk7CiB9OwogCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFRoaXMgaXMgYSBzaW1wbGUgY2xhc3MgdGhhdCBsZXRzIHVzIGRvIGVhc3kgKHRob3VnaCBub3QgdGVycmlibHkgZWZmaWNpZW50KQotLy8gIHRyYW5jb2Rpbmcgb2YgWE1MQ2ggZGF0YSB0byBsb2NhbCBjb2RlIHBhZ2UgZm9yIGRpc3BsYXkuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNsYXNzIFN0clgKLXsKLXB1YmxpYyA6Ci0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyAgQ29uc3RydWN0b3JzIGFuZCBEZXN0cnVjdG9yCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTdHJYKGNvbnN0IFhNTENoKiBjb25zdCB0b1RyYW5zY29kZSwgY29uc3QgdW5zaWduZWQgaW50IGxlbiA9IDApIDoKLQotICAgICAgICBmTG9jYWxGb3JtKDApCi0gICAgewotICAgICAgICAvLyBDYWxsIHRoZSBwcml2YXRlIHRyYW5zY29kaW5nIG1ldGhvZAotICAgICAgICB0cmFuc2NvZGUodG9UcmFuc2NvZGUsIGxlbik7Ci0gICAgfQotCi0gICAgflN0clgoKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIGZMb2NhbEZvcm07Ci0gICAgfQotCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vICBHZXR0ZXIgbWV0aG9kcwotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgY29uc3QgY2hhciogbG9jYWxGb3JtKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmTG9jYWxGb3JtOwotICAgIH0KLQotCi1wcml2YXRlIDoKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vICBQcml2YXRlIGhlbHBlciBtZXRob2RzCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl2b2lkIHRyYW5zY29kZSAoY29uc3QgWE1MQ2gqIGNvbnN0IHRvVHJhbnNjb2RlLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuKTsKLQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyAgUHJpdmF0ZSBkYXRhIG1lbWJlcnMKLSAgICAvLwotICAgIC8vICBmTG9jYWxGb3JtCi0gICAgLy8gICAgICBUaGlzIGlzIHRoZSBsb2NhbCBjb2RlIHBhZ2UgZm9ybSBvZiB0aGUgc3RyaW5nLgotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgY2hhciogICBmTG9jYWxGb3JtOwotfTsKLQotaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgdGFyZ2V0LCBjb25zdCBTdHJYJiB0b0R1bXApCi17Ci0gICAgdGFyZ2V0IDw8IHRvRHVtcC5sb2NhbEZvcm0oKTsKLSAgICByZXR1cm4gdGFyZ2V0OwotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ET01QcmludC9NYWtlZmlsZS5pbiBiL3NhbXBsZXMvRE9NUHJpbnQvTWFrZWZpbGUuaW4KaW5kZXggNGY5ZmJlZS4uMmYwYjAwYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9ET01QcmludC9NYWtlZmlsZS5pbgorKysgYi9zYW1wbGVzL0RPTVByaW50L01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxMSBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjUyICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTIgMjA6MzQ6MzUgIHJhaHVsagorIyBSZXBsYWNlZCBYTUw0Q1JPT1Qgd2l0aCBYRVJDRVNDUk9PVC4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOTo1MiAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDM6MzYgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTgzLDEwICs4NiwxMCBAQAogCiBBUFBfTkFNRT1ET01QcmludAogCi1PVVRESVI9ICR7WE1MNENST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9Ci1FWEVDPQkke1hNTDRDUk9PVH0vYmluCitPVVRESVI9ICR7WEVSQ0VTQ1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KK0VYRUM9CSR7WEVSQ0VTQ1JPT1R9L2JpbgogT0JKUz0JJHtPVVRESVJ9L0RPTVByaW50Lm8gJHtPVVRESVJ9L0RPTVRyZWVFcnJvclJlcG9ydGVyLm8KLVNSQz0JJHtYTUw0Q1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KK1NSQz0JJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQogSEVBREVSX0ZJTEVTPSR7U1JDfS9ET01UcmVlRXJyb3JSZXBvcnRlci5ocHAKIAogIyMgT1MzOTBCQVRDSApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9FbnVtVmFsL0VudW1WYWwuY3BwIGIvc2FtcGxlcy9FbnVtVmFsL0VudW1WYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGMwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0VudW1WYWwvRW51bVZhbC5jcHAKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgVXNlLCBkdXBsaWNhdGlvbiBvcgorICogZGlzY2xvc3VyZSByZXN0cmljdGVkIGJ5IEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4KKyAqCisgKiBUaGUgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IGV4cHJlc3Mgb3IKKyAqIGltcGxpZWQsIGluY2x1ZGluZyB0aGUgd2FycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQKKyAqIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAqIElCTSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHN1ZmZlcmVkIGJ5IHlvdSBhcyBhIHJlc3VsdAorICogb2YgdXNpbmcgdGhlIFByb2dyYW0uIEluIG5vIGV2ZW50IHdpbGwgSUJNIGJlIGxpYWJsZSBmb3IgYW55CisgKiBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zdCBwcm9maXRzIGV2ZW4gaWYKKyAqIElCTSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGVpciBvY2N1cnJlbmNlLiBJQk0KKyAqIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IHlvdS4KKyAqLworCisvKioKKyAqIEB2ZXJzaW9uIFJldmlzaW9uOiAlTSUgJUklICVXJSAlUSUKKyAqLworCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEluY2x1ZGVzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlIDx1dGlsL05hbWVJZFBvb2wuaHBwPgorI2luY2x1ZGUgPHV0aWwvUGxhdGZvcm1VdGlscy5ocHA+CisjaW5jbHVkZSA8ZnJhbWV3b3JrL1hNTFZhbGlkYXRvci5ocHA+CisjaW5jbHVkZSA8cGFyc2Vycy9TQVhQYXJzZXIuaHBwPgorI2luY2x1ZGUgPHZhbGlkYXRvcnMvRFREL0RURFZhbGlkYXRvci5ocHA+CisjaW5jbHVkZSA8aW9zdHJlYW0uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBGb3J3YXJkIHJlZmVyZW5jZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHZvaWQgdXNhZ2UoKTsKKworCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFRoaXMgaXMgYSBzaW1wbGUgY2xhc3MgdGhhdCBsZXRzIHVzIGRvIGVhc3kgKHRob3VnaCBub3QgdGVycmlibHkgZWZmaWNpZW50KQorLy8gIHRyYW5jb2Rpbmcgb2YgWE1MQ2ggZGF0YSB0byBsb2NhbCBjb2RlIHBhZ2UgZm9yIGRpc3BsYXkuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIFN0clgKK3sKK3B1YmxpYyA6CisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgQ29uc3RydWN0b3JzIGFuZCBEZXN0cnVjdG9yCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTdHJYKGNvbnN0IFhNTENoKiBjb25zdCB0b1RyYW5zY29kZSwgY29uc3QgdW5zaWduZWQgaW50IGxlbiA9IDApIDoKKworICAgICAgICBmTG9jYWxGb3JtKDApCisgICAgeworICAgICAgICAvLyBDYWxsIHRoZSBwcml2YXRlIHRyYW5zY29kaW5nIG1ldGhvZAorICAgICAgICB0cmFuc2NvZGUodG9UcmFuc2NvZGUsIGxlbik7CisgICAgfQorCisgICAgflN0clgoKQorICAgIHsKKyAgICAgICAgZGVsZXRlIFtdIGZMb2NhbEZvcm07CisgICAgfQorCisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICBHZXR0ZXIgbWV0aG9kcworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgY29uc3QgY2hhciogbG9jYWxGb3JtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmTG9jYWxGb3JtOworICAgIH0KKworCitwcml2YXRlIDoKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICBQcml2YXRlIGhlbHBlciBtZXRob2RzCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl2b2lkIHRyYW5zY29kZSAoY29uc3QgWE1MQ2gqIGNvbnN0IHRvVHJhbnNjb2RlLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuKTsKKworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyAgUHJpdmF0ZSBkYXRhIG1lbWJlcnMKKyAgICAvLworICAgIC8vICBmTG9jYWxGb3JtCisgICAgLy8gICAgICBUaGlzIGlzIHRoZSBsb2NhbCBjb2RlIHBhZ2UgZm9ybSBvZiB0aGUgc3RyaW5nLgorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgY2hhciogICBmTG9jYWxGb3JtOworfTsKKworaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgdGFyZ2V0LCBjb25zdCBTdHJYJiB0b0R1bXApCit7CisgICAgdGFyZ2V0IDw8IHRvRHVtcC5sb2NhbEZvcm0oKTsKKyAgICByZXR1cm4gdGFyZ2V0OworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFByb2dyYW0gZW50cnkgcG9pbnQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3NbXSkKK3sKKyAgICAvLyBJbml0aWFsaXplIHRoZSBYTUw0QyBzeXN0ZW0KKyAgICB0cnkKKyAgICB7CisgICAgICAgICBYTUxQbGF0Zm9ybVV0aWxzOjpJbml0aWFsaXplKCk7CisgICAgfQorCisgICAgY2F0Y2ggKGNvbnN0IFhNTEV4Y2VwdGlvbiYgdG9DYXRjaCkKKyAgICB7CisgICAgICAgICBjZXJyICAgPDwgIkVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbiEgTWVzc2FnZTpcbiIKKyAgICAgICAgICAgICAgICA8PCBTdHJYKHRvQ2F0Y2guZ2V0TWVzc2FnZSgpKSA8PCBlbmRsOworICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLy8gV2Ugb25seSBoYXZlIG9uZSByZXF1aXJlZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIHRoZSBmaWxlIHRvIHByb2Nlc3MKKyAgICBpZiAoYXJnYyA8IDIpCisgICAgeworICAgICAgICB1c2FnZSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHhtbEZpbGUgPSBhcmdzWzFdOworICAgIGJvb2wgIGRvVmFsaWRhdGlvbiA9IGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIHNvbWUgc3BlY2lhbCBjYXNlcyB2YWx1ZXMgb2YgdGhlIHBhcmFtZXRlcgorICAgIGlmICghc3RybmNtcCh4bWxGaWxlLCAiLT8iLCAyKSkKKyAgICB7CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAgZWxzZSBpZiAoIXN0cm5jbXAoeG1sRmlsZSwgIi12IiwgMikpCisgICAgeworICAgICAgICBkb1ZhbGlkYXRpb24gPSB0cnVlOworICAgICAgICBpZiAoYXJnYyA8IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgeG1sRmlsZSA9IGFyZ3NbMl07CisgICAgfQorICAgICBlbHNlIGlmICh4bWxGaWxlWzBdID09ICctJykKKyAgICB7CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLworICAgIC8vICBDcmVhdGUgYSBEVEQgdmFsaWRhdG9yIHRvIGJlIHVzZWQgZm9yIG91ciB2YWxpZGF0aW9uIHdvcmsuIFRoZW4gY3JlYXRlCisgICAgLy8gIGEgU0FYIHBhcnNlciBvYmplY3QgYW5kIHBhc3MgaXQgb3VyIHZhbGlkYXRvci4gVGhlbiwgYWNjb3JkaW5nIHRvIHdoYXQKKyAgICAvLyAgd2Ugd2VyZSB0b2xkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHNldCBpdCB0byB2YWxpZGF0ZSBvciBub3QuIEhlIG93bnMKKyAgICAvLyAgdGhlIHZhbGlkYXRvciwgc28gd2UgaGF2ZSB0byBhbGxvY2F0ZSBpdC4KKyAgICAvLworICAgIERURFZhbGlkYXRvciogdmFsVG9Vc2UgPSBuZXcgRFREVmFsaWRhdG9yOworICAgIFNBWFBhcnNlciBwYXJzZXIodmFsVG9Vc2UpOworICAgIHBhcnNlci5zZXREb1ZhbGlkYXRpb24oZG9WYWxpZGF0aW9uKTsKKworICAgIC8vCisgICAgLy8gIEdldCB0aGUgc3RhcnRpbmcgdGltZSBhbmQga2ljayBvZmYgdGhlIHBhcnNlIG9mIHRoZSBpbmRpY2F0ZWQKKyAgICAvLyAgZmlsZS4gQ2F0Y2ggYW55IGV4Y2VwdGlvbnMgdGhhdCBtaWdodCBwcm9wb2dhdGUgb3V0IG9mIGl0LgorICAgIC8vCisgICAgdHJ5CisgICAgeworICAgICAgICBwYXJzZXIucGFyc2UoeG1sRmlsZSk7CisgICAgfQorCisgICAgY2F0Y2ggKGNvbnN0IFhNTEV4Y2VwdGlvbiYgZSkKKyAgICB7CisgICAgICAgIGNlcnIgPDwgIlxuRXJyb3IgZHVyaW5nIHBhcnNpbmc6ICciIDw8IHhtbEZpbGUgPDwgIidcbiIKKyAgICAgICAgICAgICA8PCAiRXhjZXB0aW9uIG1lc3NhZ2UgaXM6ICBcbiIKKyAgICAgICAgICAgICA8PCBTdHJYKGUuZ2V0TWVzc2FnZSgpKSA8PCAiXG4iIDw8IGVuZGw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLworICAgIC8vICBOb3cgd2Ugd2lsbCBnZXQgYW4gZW51bWVyYXRvciBmb3IgdGhlIGVsZW1lbnQgcG9vbCBmcm9tIHRoZSB2YWxpZGF0b3IKKyAgICAvLyAgYW5kIGVudW1lcmF0ZSB0aGUgZWxlbWVudHMsIHByaW50aW5nIHRoZW0gYXMgd2UgZ28uIEZvciBlYWNoIGVsZW1lbnQKKyAgICAvLyAgd2UgZ2V0IGFuIGVudW1lcmF0b3IgZm9yIGl0cyBhdHRyaWJ1dGVzIGFuZCBwcmludCB0aGVtIGFsc28uCisgICAgLy8KKyAgICBOYW1lSWRQb29sRW51bWVyYXRvcjxEVERFbGVtZW50RGVjbD4gZWxlbUVudW0gPSB2YWxUb1VzZS0+Z2V0RWxlbUVudW1lcmF0b3IoKTsKKyAgICBpZiAoZWxlbUVudW0uaGFzTW9yZUVsZW1lbnRzKCkpCisgICAgeworICAgICAgICBjb3V0IDw8ICJcbkVMRU1FTlRTOlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICAgICAgd2hpbGUoZWxlbUVudW0uaGFzTW9yZUVsZW1lbnRzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IERUREVsZW1lbnREZWNsJiBjdXJFbGVtID0gZWxlbUVudW0ubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGNvdXQgPDwgIiAgTmFtZTogIiA8PCBTdHJYKGN1ckVsZW0uZ2V0RnVsbE5hbWUoKSkgPDwgIlxuIjsKKworICAgICAgICAgICAgY291dCA8PCAiICBDb250ZW50IE1vZGVsOiAiCisgICAgICAgICAgICAgICAgIDw8IFN0clgoY3VyRWxlbS5nZXRGb3JtYXR0ZWRDb250ZW50TW9kZWwoKnZhbFRvVXNlKSkKKyAgICAgICAgICAgICAgICAgPDwgIlxuIjsKKworICAgICAgICAgICAgLy8gR2V0IGFuIGVudW1lcmF0b3IgZm9yIHRoaXMgZ3V5J3MgYXR0cmlidXRlcyBpZiBhbnkKKyAgICAgICAgICAgIGlmIChjdXJFbGVtLmhhc0F0dERlZnMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb3V0IDw8ICIgIEF0dHJpYnV0ZXM6XG4iOworICAgICAgICAgICAgICAgIFhNTEF0dERlZkxpc3QmIGF0dExpc3QgPSBjdXJFbGVtLmdldEF0dERlZkxpc3QoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYXR0TGlzdC5oYXNNb3JlRWxlbWVudHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTEF0dERlZiYgY3VyQXR0RGVmID0gYXR0TGlzdC5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICIgICAgTmFtZToiIDw8IFN0clgoY3VyQXR0RGVmLmdldEZ1bGxOYW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiwgVHlwZTogIjsKKworICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHR5cGUgYW5kIGRpc3BsYXkgaXQKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MQXR0RGVmOjpBdHRUeXBlcyB0eXBlID0gY3VyQXR0RGVmLmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MQXR0RGVmOjpDRGF0YSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiQ0RBVEEiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTEF0dERlZjo6SUQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIklEIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxBdHREZWY6OklEUmVmIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MQXR0RGVmOjpJRFJlZnMgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIklEUkVGKFMpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxBdHREZWY6OkVudGl0eSA6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTEF0dERlZjo6RW50aXRpZXMgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIkVOVElUWShJRVMpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxBdHREZWY6Ok5tVG9rZW4gOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxBdHREZWY6Ok5tVG9rZW5zIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJOTVRPS0VOKFMpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxBdHREZWY6Ok5vdGF0aW9uIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJOT1RBVElPTiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MQXR0RGVmOjpFbnVtZXJhdGlvbiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiRU5VTUVSQVRJT04iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdXQgPDwgZW5kbDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgZWxzZQorICAgIHsKKyAgICAgICAgY291dCA8PCAiVGhlIHZhbGlkYXRvciBoYXMgbm8gZWxlbWVudHMgdG8gZGlzcGxheVxuIiA8PCBlbmRsOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBMb2NhbCBoZWxwZXIgbWV0aG9kcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgdm9pZCB1c2FnZSgpCit7CisgICAgY291dCA8PCAiXG5Vc2FnZTpcbiIKKyAgICAgICAgICIgICAgRW51bVZhbCBbLXZdIDxYTUwgZmlsZT5cbiIKKyAgICAgICAgICIgICAgLXYgIERvIGEgdmFsaWRhdGluZyBwYXJzZS4gRGVmYXVsdHMgdG8gbm9uLXZhbGlkYXRpbmcuXG4iCisgICAgICAgICAiVGhpcyBwcm9ncmFtIHBhcnNlcyBhIGZpbGUsIHRoZW4gc2hvd3MgaG93IHRvIGVudW1lcmF0ZSB0aGUiCisgICAgICAgICAiY29udGVudHMgb2YgdGhlIHZhbGlkYXRvciBwb29sc1xuIiA8PCBlbmRsOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFN0clg6IFByaXZhdGUgaGVscGVyIG1ldGhvZHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBTdHJYOjp0cmFuc2NvZGUoY29uc3QgWE1MQ2gqIGNvbnN0IHRvVHJhbnNjb2RlLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuKQoreworICAgIC8vIFNob3J0IGNpcmN1aXQgaWYgaXRzIGEgbnVsbCBwb2ludGVyCisgICAgaWYgKCF0b1RyYW5zY29kZSkKKyAgICB7CisgICAgICAgIGZMb2NhbEZvcm0gPSBuZXcgY2hhclsxXTsKKyAgICAgICAgZkxvY2FsRm9ybVswXSA9IDA7CisgICAgICAgIHJldHVybjsKKwl9CisKKyAgICAvLyBTZWUgaWYgb3VyIFhNTENoIGFuZCB3Y2hhcl90IGFzIHRoZSBzYW1lIG9uIHRoaXMgcGxhdGZvcm0KKyAgICBjb25zdCBib29sIGlzU2FtZVNpemUgPSAoc2l6ZW9mKFhNTENoKSA9PSBzaXplb2Yod2NoYXJfdCkpOworCisgICAgLy8KKyAgICAvLyAgR2V0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJzLiBJZiB0aGUgcGFzc2VkIGxlbiBpcyB6ZXJvLCBpdHMgbnVsbAorICAgIC8vICB0ZXJtaW5hdGVkLiBFbHNlIHdlIGhhdmUgdG8gdXNlIHRoZSBsZW4uCisgICAgLy8KKyAgICB3Y2hhcl90IHJlYWxMZW4gPSAod2NoYXJfdClsZW47CisgICAgaWYgKCFyZWFsTGVuKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gIFdlIGNhbm5vdCBqdXN0IGFzc3VtZSB3ZSBjYW4gdXNlIHdjc2xlbigpIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdworICAgICAgICAvLyAgaWYgb3VyIFhNTENoIGlzIHRoZSBzYW1lIGFzIHdjaGFyX3Qgb24gdGhpcyBwbGF0Zm9ybS4KKyAgICAgICAgLy8KKyAgICAgICAgY29uc3QgWE1MQ2gqIHRtcFB0ciA9IHRvVHJhbnNjb2RlOworICAgICAgICB3aGlsZSAoKih0bXBQdHIrKykpCisgICAgICAgICAgICByZWFsTGVuKys7CisgICAgfQorCisgICAgLy8KKyAgICAvLyAgSWYgZWl0aGVyIHRoZSBwYXNzZWQgbGVuZ3RoIHdhcyBub24temVybyBvciBvdXIgY2hhciBzaXplcyBhcmUgbm90IAorICAgIC8vICBzYW1lLCB3ZSBoYXZlIHRvIHVzZSBhIHRlbXAgYnVmZmVyLiBTaW5jZSB0aGlzIGlzIGNvbW1vbiBpbiB0aGVzZQorICAgIC8vICBzYW1wbGVzLCB3ZSBqdXN0IGRvIGl0IGFueXdheS4KKyAgICAvLworICAgIHdjaGFyX3QqIHRtcFNvdXJjZSA9IG5ldyB3Y2hhcl90W3JlYWxMZW4gKyAxXTsKKyAgICBpZiAoaXNTYW1lU2l6ZSkKKyAgICB7CisgICAgICAgIG1lbWNweSh0bXBTb3VyY2UsIHRvVHJhbnNjb2RlLCByZWFsTGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICB9CisgICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCByZWFsTGVuOyBpbmRleCsrKQorICAgICAgICAgICAgdG1wU291cmNlW2luZGV4XSA9ICh3Y2hhcl90KXRvVHJhbnNjb2RlW2luZGV4XTsKKyAgICB9CisgICAgdG1wU291cmNlW3JlYWxMZW5dID0gMDsKKworICAgIC8vIFNlZSBub3cgbWFueSBjaGFycyB3ZSBuZWVkIHRvIHRyYW5zY29kZSB0aGlzIGd1eQorICAgIGNvbnN0IHVuc2lnbmVkIGludCB0YXJnZXRMZW4gPSA6Ondjc3RvbWJzKDAsIHRtcFNvdXJjZSwgMCk7CisKKyAgICAvLyBBbGxvY2F0ZSBvdXQgc3RvcmFnZSBtZW1iZXIKKyAgICBmTG9jYWxGb3JtID0gbmV3IGNoYXJbdGFyZ2V0TGVuICsgMV07CisKKyAgICAvLworICAgIC8vICBBbmQgdHJhbnNjb2RlIG91ciB0ZW1wIHNvdXJjZSBidWZmZXIgdG8gdGhlIGxvY2FsIGJ1ZmZlci4gQ2FwIGl0CisgICAgLy8gIG9mZiBzaW5jZSB0aGUgY29udmVydGVyIHdvbid0IGRvIGl0IChiZWNhdXNlIHRoZSBudWxsIGlzIGJleW9uZAorICAgIC8vICB3aGVyZSB0aGUgdGFyZ2V0IHdpbGwgZmlsbCB1cC4pCisgICAgLy8KKyAgICA6Ondjc3RvbWJzKGZMb2NhbEZvcm0sIHRtcFNvdXJjZSwgdGFyZ2V0TGVuKTsKKyAgICBmTG9jYWxGb3JtW3RhcmdldExlbl0gPSAwOworCisgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIGRlbGV0ZSBvdXIgdGVtcCBidWZmZXIKKyAgICBkZWxldGUgW10gdG1wU291cmNlOworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9FbnVtVmFsL01ha2VmaWxlLmluIGIvc2FtcGxlcy9FbnVtVmFsL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZGU1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0VudW1WYWwvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMDcgQEAKKyMKKyMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorIyAKKyMgQ29weXJpZ2h0IChjKSAxOTk5IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCisjIHJlc2VydmVkLgorIyAKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyMgCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorIyAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjICAgIGRpc3RyaWJ1dGlvbi4KKyMgCisjIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorIyAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCisjICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorIyAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyMgICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAorIyAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorIyAKKyMgNC4gVGhlIG5hbWVzICJYZXJjZXMiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKKyMgICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisjICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKKyMgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlXEBhcGFjaGUub3JnLgorIyAKKyMgNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCisjICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorIyAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyMgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgorIyBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorIyBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyMgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAKKyMgVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyMgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIHdhcworIyBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAorIyBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiwgaHR0cDovL3d3dy5pYm0uY29tIC4gIEZvciBtb3JlIGluZm9ybWF0aW9uCisjIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQorIyA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisjIAorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAgICAgICAgICAgICAgICAgICBJTVBPUlRBTlQgTk9URSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElmIHlvdSBhcmUgZ29pbmcgdG8gZG8gdGhlIE9TMzkwQkFUQ0ggYnVpbGQsIG1ha2Ugc3VyZSB5b3UgaGF2ZSAjCisjIHRoZSBPUzM5MEJBVENIIGVudmlyb25tZW50IHZhcmlhYmxlIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgZXhwb3J0IE9TMzkwQkFUQ0g9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1BMQVRGT1JNID0gQHBsYXRmb3JtQAorQ09NUElMRVIgPSBAY29tcGlsZXJACitDWFhGTEFHUyA9IEBjeHhmbGFnc0AKK0NGTEFHUyA9IEBjZmxhZ3NACitQUkVGSVggPSBAcHJlZml4QAorCitpbmNsdWRlIC4uL01ha2VmaWxlLmluY2wKKworQVBQX05BTUU9RW51bVZhbAorCitPVVRESVI9ICR7WEVSQ0VTQ1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KK0VYRUM9CSR7WEVSQ0VTQ1JPT1R9L2JpbgorT0JKUz0JJHtPVVRESVJ9L0VudW1WYWwubworU1JDPQkke1hFUkNFU0NST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CitIRUFERVJfRklMRVM9CisKKyMjIE9TMzkwQkFUQ0gKK2lmZXEgKCR7T1MzOTBCQVRDSH0sMSkKK0JBVENIX1RBUkdFVD0gIi8vJyR7TE9BRE1PRH0oJHtBUFBfTkFNRX0pJyIKK2FsbDogbWFrZWRpciAke0JBVENIX1RBUkdFVH0KK2Vsc2UKK2FsbDogbWFrZWRpciAke0VYRUN9LyR7QVBQX05BTUV9CitlbmRpZgorCittYWtlZGlyOgorCS1ta2RpciAtcCAkKE9VVERJUikKKworJHtFWEVDfS8ke0FQUF9OQU1FfTogJHtPQkpTfQorCSR7TElOS30gJHtQTEFURk9STV9MSUJfTElOS19PUFRJT05TfSAke09CSlN9IC1vICRAICR7TElCUkFSWV9TRUFSQ0hfUEFUSFN9ICR7TElCUkFSWV9OQU1FU30gJHtFWFRSQV9MSU5LX09QVElPTlN9IAorJHtCQVRDSF9UQVJHRVR9OiAke09CSlN9CisJJHtMSU5LfSAke1BMQVRGT1JNX0xJQl9MSU5LX09QVElPTlN9ICR7T0JKU30gLW8gJEAgJHtMSUJSQVJZX1NFQVJDSF9QQVRIU30gJHtMSUJSQVJZX05BTUVTfSAke0VYVFJBX0xJTktfT1BUSU9OU30gCisKKyQoT1VURElSKS9FbnVtVmFsLm86ICR7U1JDfS9FbnVtVmFsLmNwcCAke0hFQURFUl9GSUxFU30KKwkke0NDfSAke0NNUH0gJChJTkNMVURFUykgLW8gJChPVVRESVIpL0VudW1WYWwubyAke1NSQ30vRW51bVZhbC5jcHAKKworY2xlYW46CisJcm0gLWYgJHtPQkpTfSAke0VYRUN9LyR7QVBQX05BTUV9CisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiBNYWtlZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9NYWtlZmlsZS5pbiBiL3NhbXBsZXMvTWFrZWZpbGUuaW4KaW5kZXggNjFjYjFjMS4uZDc0NjE1NiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NYWtlZmlsZS5pbgorKysgYi9zYW1wbGVzL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxNCBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjI1ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMzAgMjE6MzU6MjEgIGFiYWdjaGkKKyMgSW5jbHVkZWQgRW51bVZhbCBpbiB0aGUgbGlzdCBvZiBzYW1wbGVzCisjCisjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8xMiAyMDozMToyMiAgcmFodWxqCisjIFJlcGxhY2VkIFhNTDRDUk9PVCB3aXRoIFhFUkNFU0NST09ULgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjI1ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8wOCAyMDo0MzozMyAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzEsNyArNzcsOCBAQAogTWVtUGFyc2VfRElSPU1lbVBhcnNlCiBQUGFyc2VfRElSPVBQYXJzZQogU3RkSW5QYXJzZV9ESVI9U3RkSW5QYXJzZQotTElCX0RJUj0ke1hNTDRDUk9PVH0vbGliCitFbnVtVmFsX0RJUj1FbnVtVmFsCitMSUJfRElSPSR7WEVSQ0VTQ1JPT1R9L2xpYgogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKIENPTVBJTEVSID0gQGNvbXBpbGVyQApAQCAtNzksNyArODYsNyBAQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACiAKLWFsbDoJc2F4cHJpbnQgc2F4Y291bnQgZG9tcHJpbnQgZG9tY291bnQgcmVkaXJlY3QgbWVtcGFyc2UgcHBhcnNlIHN0ZGlucGFyc2UKK2FsbDoJc2F4cHJpbnQgc2F4Y291bnQgZG9tcHJpbnQgZG9tY291bnQgcmVkaXJlY3QgbWVtcGFyc2UgcHBhcnNlIHN0ZGlucGFyc2UgZW51bXZhbAogCiBzYXhwcmludDoKIAlAZWNobyBCdWlsZGluZyAiU0FYUHJpbnQiCkBAIC0xMTMsNiArMTIwLDEwIEBACiAJQGVjaG8gQnVpbGRpbmcgIlN0ZEluUGFyc2UiCiAJY2QgJChTdGRJblBhcnNlX0RJUikgOyAkKE1BS0UpICQoTUFLRV9GTEFHUykgOyBjZCAuLgogCitlbnVtdmFsOgorCUBlY2hvIEJ1aWxkaW5nICJFbnVtVmFsIgorCWNkICQoRW51bVZhbF9ESVIpIDsgJChNQUtFKSAkKE1BS0VfRkxBR1MpIDsgY2QgLi4KKwogY2xlYW46CiAJY2QgJChTQVhQcmludF9ESVIpICYmICQoTUFLRSkgJEAgJiYgY2QgLi4KIAljZCAkKFNBWENvdW50X0RJUikgJiYgJChNQUtFKSAkQCAmJiBjZCAuLgpAQCAtMTIyLDYgKzEzMyw3IEBACiAJY2QgJChSZWRpcmVjdF9ESVIpICYmICQoTUFLRSkgJEAgJiYgY2QgLi4KIAljZCAkKFBQYXJzZV9ESVIpICYmICQoTUFLRSkgJEAgJiYgY2QgLi4KIAljZCAkKFN0ZEluUGFyc2VfRElSKSAmJiAkKE1BS0UpICRAICYmIGNkIC4uCisJY2QgJChFbnVtVmFsX0RJUikgJiYgJChNQUtFKSAkQCAmJiBjZCAuLgogCiBkaXN0Y2xlYW46CiAJY2QgJChTQVhQcmludF9ESVIpICYmICQoTUFLRSkgJEAgJiYgY2QgLi4KQEAgLTEzMiw2ICsxNDQsNyBAQAogCWNkICQoUmVkaXJlY3RfRElSKSAmJiAkKE1BS0UpICRAICYmIGNkIC4uCiAJY2QgJChQUGFyc2VfRElSKSAmJiAkKE1BS0UpICRAICYmIGNkIC4uCiAJY2QgJChTdGRJblBhcnNlX0RJUikgJiYgJChNQUtFKSAkQCAmJiBjZCAuLgorCWNkICQoRW51bVZhbF9ESVIpICYmICQoTUFLRSkgJEAgJiYgY2QgLi4KIAlybSAtZiBNYWtlZmlsZSBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzCiAJcm0gLWYgKn4gY29yZQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL01ha2VmaWxlLmluY2wgYi9zYW1wbGVzL01ha2VmaWxlLmluY2wKaW5kZXggYzlhNmM1MC4uOGE0YWQwMSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NYWtlZmlsZS5pbmNsCisrKyBiL3NhbXBsZXMvTWFrZWZpbGUuaW5jbApAQCAtNTUsOCArNTUsMTQgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToyNSAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS40ICAxOTk5LzEyLzAxIDAxOjA4OjIwICBhcnVuYTEKKyMgQWRkZWQgbm90ZW1waW5jIGZvciBBSVgKKyMKKyMgUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjMxOjIzICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjUgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQzOjM0ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02NSwxMSArNzEsMTEgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIExJQlJBUlkgTkFNRVMgQU5EIERJUkVDVE9SSUVTICMjIyMjIyMjIyMjIyMjIyMjIwogCi1JTkNMVURFUz0gLUkuIC1JJHtYTUw0Q1JPT1R9L2luY2x1ZGUKLUxJQl9ESVI9JHtYTUw0Q1JPT1R9L2xpYgotTElCTkFNRT1JWFhNTDRDCitJTkNMVURFUz0gLUkuIC1JJHtYRVJDRVNDUk9PVH0vaW5jbHVkZQorTElCX0RJUj0ke1hFUkNFU0NST09UfS9saWIKK0xJQk5BTUU9eGVyY2VzLWMKIFRISVNMSUI9JHtMSUJfRElSfS8ke0xJQk5BTUV9Ci1WRVI9M18wCitWRVI9MV8wCiBpZmRlZiBJQ1VST09UCiAgICBJQ1VfTElCX0RJUj0ke0lDVVJPT1R9L2xpYgogICAgSUNVX0xJQk5BTUU9aWN1LXVjCkBAIC0xMDIsNyArMTA4LDcgQEAKIAogIz09PT09PT09PT09PT09PT09IEFJWCBTUEVDSUZJQyBPUFRJT05TID09PT09PT09PT09PT09PT09PT09PT09PT09PQogaWZlcSAoJHtQTEFURk9STX0sIEFJWCkKLUNNUD0gLWMgJHtDWFhGTEFHU30KK0NNUD0gLWMgJHtDWFhGTEFHU30gLXFub3RlbXBpbmMKIENDPXhsQ19yIC1EJHtQTEFURk9STX0KIExJTksgPSAgJHtDQ30KIFBMQVRGT1JNX0xJQl9MSU5LX09QVElPTlM9LUwvdXNyL2xwcC94bEMvbGliCkBAIC0xMzMsNyArMTM5LDcgQEAKICAgICAgIENYWEZMQUdTID0gLXcgK08xCiAgICAgZW5kaWYKICAgICBBUFBMX05BTUUgPSAkKG5vdGRpciAkKHNoZWxsIHB3ZCkpCi0gICAgVEVNUExBVEVTRElSID0gJChYTUw0Q1JPT1QpL2Jpbi9vYmovJChBUFBMX05BTUUpL3B0cmVwb3NpdG9yeQorICAgIFRFTVBMQVRFU0RJUiA9ICQoWEVSQ0VTQ1JPT1QpL2Jpbi9vYmovJChBUFBMX05BTUUpL3B0cmVwb3NpdG9yeQogICAgIENPTU1PTl9DTVAgPSAkKENYWEZMQUdTKSAtRF9IUF9VWCAtREhQQ0MgK0RBcG9ydGFibGUgLXcgK2VoICt6IC16IFwKICAgICAgICAgLXB0ciQoVEVNUExBVEVTRElSKQogICAgIENNUCA9IC1jICQoQ09NTU9OX0NNUCkKQEAgLTE1MSwxOSArMTU3LDcgQEAKICMgQmVmb3JlIHlvdSB0cnkgdG8gcnVuIHRoZSBNYWtlZmlsZSwgbWFrZSBzdXJlIHlvdSBoYXZlIHR3byAgICAgICMKICMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgICBleHBvcnQgWE1MNENST09UPTx0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBpbnN0YWxsZWQgWE1MNEM+ICAgICMKLSMgWE1MNEMgY2FuIGJlIGJ1aWx0IGluIHR3byB3YXlzICgxKSB1c2luZyBJQ1UgYW5kICAgICAgICAgICAgICAgICMKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyKSB1c2luZyBJY29udiAobm90IElDVSkgICAgICAgICMKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgVG8gdXNlIElDVSwgeW91IG11c3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgICBleHBvcnQgSUNVUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIElDVT4gICAgICAgICMKLSMgVG8gZGlzYWJsZSBJQ1UgYW5kIHVzZSBJY29udiBpbnN0ZWFkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgICB1bnNldCBJQ1VST09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgQWxzbywgdG8gZW5hYmxlIGRlYnVnZ2luZywgeW91IG11c3QgdHlwZTogICAgICAgICAgICAgICAgICAgICAgICMKLSMgICBleHBvcnQgREVCVUc9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgVG8gZGlzYWJsZSBkZWJ1Z2dpbmcsIHlvdSBtdXN0IHR5cGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgICB1bnNldCBERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgZXhwb3J0IFhFUkNFU0NST09UPTx0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBpbnN0YWxsZWQgWEVSQ0VTLUM+ICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgSWYgeW91IGFyZSBnb2luZyB0byBkbyB0aGUgT1MzOTBCQVRDSCBidWlsZCwgbWFrZSBzdXJlIHlvdSBoYXZlICMKICMgdGhlIE9TMzkwQkFUQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICMKZGlmZiAtLWdpdCBhL3NhbXBsZXMvTWVtUGFyc2UvTWFrZWZpbGUuaW4gYi9zYW1wbGVzL01lbVBhcnNlL01ha2VmaWxlLmluCmluZGV4IDg2YjEwZDYuLjQ4Y2FlOTggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTWVtUGFyc2UvTWFrZWZpbGUuaW4KKysrIGIvc2FtcGxlcy9NZW1QYXJzZS9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTo0OSAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDIwOjM0OjM5ICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6NDkgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQzOjM2ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04MywxMCArODYsMTAgQEAKIAogQVBQX05BTUU9TWVtUGFyc2UKIAotT1VURElSPSAke1hNTDRDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQotRVhFQz0JJHtYTUw0Q1JPT1R9L2JpbgorT1VURElSPSAke1hFUkNFU0NST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9CitFWEVDPQkke1hFUkNFU0NST09UfS9iaW4KIE9CSlM9CSR7T1VURElSfS9NZW1QYXJzZS5vICR7T1VURElSfS9NZW1QYXJzZUhhbmRsZXJzLm8KLVNSQz0JJHtYTUw0Q1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KK1NSQz0JJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQogSEVBREVSX0ZJTEVTPSAke1NSQ30vTWVtUGFyc2UuaHBwICR7U1JDfS9NZW1QYXJzZUhhbmRsZXJzLmhwcAogCiAjIyBPUzM5MEJBVENICmRpZmYgLS1naXQgYS9zYW1wbGVzL01lbVBhcnNlL01lbVBhcnNlLmNwcCBiL3NhbXBsZXMvTWVtUGFyc2UvTWVtUGFyc2UuY3BwCmluZGV4IDgxNWU4ZjcuLjFkNzcwZjQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTWVtUGFyc2UvTWVtUGFyc2UuY3BwCisrKyBiL3NhbXBsZXMvTWVtUGFyc2UvTWVtUGFyc2UuY3BwCkBAIC02NCw4ICs2NCwxMSBAQAogICogb24gcGFyYW1ldGVycyB0byB0aGUgY29uc3RydWN0b3IuCiAgKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTo0OSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjAgMDE6MDk6NTUgIHJhaHVsagorICogRml4ZWQgdXNhZ2UgbWVzc2FnZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjQ5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNyAgMTk5OS8xMS8wOCAyMDo0MzozNiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEyNiw3ICsxMjksNyBAQAogdm9pZCB1c2FnZSgpCiB7CiAgICAgY291dCA8PCAiXG5Vc2FnZTpcbiIKLSAgICAgICAgIDw8ICIgICAgTWVtUGFyc2UgWy1udl1cbiIKKyAgICAgICAgIDw8ICIgICAgTWVtUGFyc2UgWy12XVxuIgogICAgICAgICAgPDwgIlRoaXMgcHJvZ3JhbSB1c2VzIHRoZSBTQVggUGFyc2VyIHRvIHBhcnNlIGEgbWVtb3J5IGJ1ZmZlclxuIgogICAgICAgICAgPDwgImNvbnRhaW5pbmcgWE1MIHN0YXRlbWVudHMsIGFuZCByZXBvcnRzIHRoZSBudW1iZXIgb2ZcbiIKICAgICAgICAgIDw8ICJlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBmb3VuZC5cbiIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvUFBhcnNlL01ha2VmaWxlLmluIGIvc2FtcGxlcy9QUGFyc2UvTWFrZWZpbGUuaW4KaW5kZXggNzNmZWVmZi4uNGY0NDdlYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9QUGFyc2UvTWFrZWZpbGUuaW4KKysrIGIvc2FtcGxlcy9QUGFyc2UvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDExIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6NDUgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAyMDozNDo0MiAgcmFodWxqCisjIFJlcGxhY2VkIFhNTDRDUk9PVCB3aXRoIFhFUkNFU0NST09ULgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjQ1ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0MzozNyAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODMsMTAgKzg2LDEwIEBACiAKIEFQUF9OQU1FPVBQYXJzZQogCi1PVVRESVI9ICR7WE1MNENST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9Ci1FWEVDPQkke1hNTDRDUk9PVH0vYmluCitPVVRESVI9ICR7WEVSQ0VTQ1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KK0VYRUM9CSR7WEVSQ0VTQ1JPT1R9L2JpbgogT0JKUz0JJHtPVVRESVJ9L1BQYXJzZS5vICR7T1VURElSfS9QUGFyc2VIYW5kbGVycy5vCi1TUkM9CSR7WE1MNENST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CitTUkM9CSR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KIEhFQURFUl9GSUxFUz0ke1NSQ30vUFBhcnNlLmhwcCAke1NSQ30vUFBhcnNlSGFuZGxlcnMuaHBwCiAKICMjIE9TMzkwQkFUQ0gKZGlmZiAtLWdpdCBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L0RPTUNvdW50L0RPTUNvdW50LmRzcCBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L0RPTUNvdW50L0RPTUNvdW50LmRzcAppbmRleCBiMDI2MzRlLi42ZjNiODFiIDEwMDY0NAotLS0gYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9ET01Db3VudC9ET01Db3VudC5kc3AKKysrIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvRE9NQ291bnQvRE9NQ291bnQuZHNwCkBAIC00Nyw3ICs0Nyw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvCiBMSU5LMzI9bGluay5leGUKICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBJWFhNTDRDMy5saWIgL25vbG9nbyAvdmVyc2lvbjoyLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgogIyBCZWdpbiBUYXJnZXQKIAogIyBOYW1lICJET01Db3VudCAtIFdpbjMyIERlYnVnIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvRE9NUHJpbnQvRE9NUHJpbnQuZHNwIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvRE9NUHJpbnQvRE9NUHJpbnQuZHNwCmluZGV4IDA2NjFjY2QuLmJiNjIyZWUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L0RPTVByaW50L0RPTVByaW50LmRzcAorKysgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9ET01QcmludC9ET01QcmludC5kc3AKQEAgLTQ3LDcgKzQ3LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYWE1MNEMzLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjIuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCiAjIEJlZ2luIFRhcmdldAogCiAjIE5hbWUgIkRPTVByaW50IC0gV2luMzIgRGVidWciCmRpZmYgLS1naXQgYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9FbnVtVmFsL0VudW1WYWwuZHNwIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvRW51bVZhbC9FbnVtVmFsLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFjMjJlCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvRW51bVZhbC9FbnVtVmFsLmRzcApAQCAtMCwwICsxLDY3IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IkVudW1WYWwiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1FbnVtVmFsIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRW51bVZhbC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIkVudW1WYWwubWFrIiBDRkc9IkVudW1WYWwgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJFbnVtVmFsIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXGJpbiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxiaW5cb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNSAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXGluY2x1ZGUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQUk9KX1NBWENPVU5UIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvR1ogL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiRW51bVZhbCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlxFbnVtVmFsXEVudW1WYWwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L01lbVBhcnNlL01lbVBhcnNlLmRzcCBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L01lbVBhcnNlL01lbVBhcnNlLmRzcAppbmRleCBlNDlmOTUwLi5jMjU0NGM5IDEwMDY0NAotLS0gYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9NZW1QYXJzZS9NZW1QYXJzZS5kc3AKKysrIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvTWVtUGFyc2UvTWVtUGFyc2UuZHNwCkBAIC00Nyw3ICs0Nyw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvCiBMSU5LMzI9bGluay5leGUKICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBJWFhNTDRDMy5saWIgL25vbG9nbyAvdmVyc2lvbjoyLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgogIyBCZWdpbiBUYXJnZXQKIAogIyBOYW1lICJNZW1QYXJzZSAtIFdpbjMyIERlYnVnIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvUFBhcnNlL1BQYXJzZS5kc3AgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9QUGFyc2UvUFBhcnNlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2Q0YTYyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvUFBhcnNlL1BQYXJzZS5kc3AKQEAgLTAsMCArMSw4MyBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJQUGFyc2UiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1QUGFyc2UgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJQUGFyc2UubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJQUGFyc2UubWFrIiBDRkc9IlBQYXJzZSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIlBQYXJzZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxiaW4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cYmluXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzUgL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxpbmNsdWRlIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUFJPSl9TQVhDT1VOVCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL0daIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIlBQYXJzZSAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlxQUGFyc2VcUFBhcnNlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXFBQYXJzZVxQUGFyc2VIYW5kbGVycy5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlxQUGFyc2VcUFBhcnNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXFBQYXJzZVxQUGFyc2VIYW5kbGVycy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIgorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvUmVkaXJlY3QvUmVkaXJlY3QuZHNwIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvUmVkaXJlY3QvUmVkaXJlY3QuZHNwCmluZGV4IGI2MTgwOWQuLjk2ODYwYWUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1JlZGlyZWN0L1JlZGlyZWN0LmRzcAorKysgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9SZWRpcmVjdC9SZWRpcmVjdC5kc3AKQEAgLTQ3LDcgKzQ3LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYWE1MNEMzLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjIuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCiAjIEJlZ2luIFRhcmdldAogCiAjIE5hbWUgIlJlZGlyZWN0IC0gV2luMzIgRGVidWciCmRpZmYgLS1naXQgYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9TQVhDb3VudC9TQVhDb3VudC5kc3AgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9TQVhDb3VudC9TQVhDb3VudC5kc3AKaW5kZXggZTAyZDgyZi4uZDJiZjA3OCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvU0FYQ291bnQvU0FYQ291bnQuZHNwCisrKyBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1NBWENvdW50L1NBWENvdW50LmRzcApAQCAtNDcsNyArNDcsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0Ci0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgSVhYTUw0QzMubGliIC9ub2xvZ28gL3ZlcnNpb246Mi4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKICMgQmVnaW4gVGFyZ2V0CiAKICMgTmFtZSAiU0FYQ291bnQgLSBXaW4zMiBEZWJ1ZyIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1NBWFByaW50L1NBWFByaW50LmRzcCBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1NBWFByaW50L1NBWFByaW50LmRzcAppbmRleCA4MWQyZTUwLi5lNGQ0NDhkIDEwMDY0NAotLS0gYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9TQVhQcmludC9TQVhQcmludC5kc3AKKysrIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvU0FYUHJpbnQvU0FYUHJpbnQuZHNwCkBAIC00Nyw3ICs0Nyw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvCiBMSU5LMzI9bGluay5leGUKICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBJWFhNTDRDMy5saWIgL25vbG9nbyAvdmVyc2lvbjoyLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgogIyBCZWdpbiBUYXJnZXQKIAogIyBOYW1lICJTQVhQcmludCAtIFdpbjMyIERlYnVnIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvU3RkSW5QYXJzZS9TdGRJblBhcnNlLmRzcCBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1N0ZEluUGFyc2UvU3RkSW5QYXJzZS5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkODZiMwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1N0ZEluUGFyc2UvU3RkSW5QYXJzZS5kc3AKQEAgLTAsMCArMSw4MyBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJTdGRJblBhcnNlIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9U3RkSW5QYXJzZSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlN0ZEluUGFyc2UubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJTdGRJblBhcnNlLm1hayIgQ0ZHPSJTdGRJblBhcnNlIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiU3RkSW5QYXJzZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxiaW4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cYmluXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzUgL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxpbmNsdWRlIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfQ09OU09MRSIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUFJPSl9TQVhDT1VOVCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL0daIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIlN0ZEluUGFyc2UgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0IgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cU3RkSW5QYXJzZVxTdGRJblBhcnNlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXFN0ZEluUGFyc2VcU3RkSW5QYXJzZUhhbmRsZXJzLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXFN0ZEluUGFyc2VcU3RkSW5QYXJzZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlxTdGRJblBhcnNlXFN0ZEluUGFyc2VIYW5kbGVycy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIgorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvc2FtcGxlcy5kc3cgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9zYW1wbGVzLmRzdwppbmRleCAyNzBiMjc3Li43NDQyMDRlIDEwMDY0NAotLS0gYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9zYW1wbGVzLmRzdworKysgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9zYW1wbGVzLmRzdwpAQCAtNzUsNiArNzUsNDIgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCitQcm9qZWN0OiAiUFBhcnNlIj0uXFBQYXJzZVxQUGFyc2UuZHNwIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJTdGRJblBhcnNlIj0uXFN0ZEluUGFyc2VcU3RkSW5QYXJzZS5kc3AgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIkVudW1WYWwiPS5cRW51bVZhbFxFbnVtVmFsLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiBHbG9iYWw6CiAKIFBhY2thZ2U9PDU+CmRpZmYgLS1naXQgYS9zYW1wbGVzL1JlZGlyZWN0L01ha2VmaWxlLmluIGIvc2FtcGxlcy9SZWRpcmVjdC9NYWtlZmlsZS5pbgppbmRleCA3OTQwZWM1Li5lNjNjYmZkIDEwMDY0NAotLS0gYS9zYW1wbGVzL1JlZGlyZWN0L01ha2VmaWxlLmluCisrKyBiL3NhbXBsZXMvUmVkaXJlY3QvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDExIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MzYgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAyMDozNDo0NiAgcmFodWxqCisjIFJlcGxhY2VkIFhNTDRDUk9PVCB3aXRoIFhFUkNFU0NST09ULgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjM2ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0MzozOCAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODMsMTAgKzg2LDEwIEBACiAKIEFQUF9OQU1FPVJlZGlyZWN0CiAKLU9VVERJUj0gJHtYTUw0Q1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KLUVYRUM9CSR7WE1MNENST09UfS9iaW4KK09VVERJUj0gJHtYRVJDRVNDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQorRVhFQz0JJHtYRVJDRVNDUk9PVH0vYmluCiBPQkpTPQkke09VVERJUn0vUmVkaXJlY3QubyAke09VVERJUn0vUmVkaXJlY3RIYW5kbGVycy5vCi1TUkM9CSR7WE1MNENST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CitTUkM9CSR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KIEhFQURFUl9GSUxFUz0ke1NSQ30vUmVkaXJlY3QuaHBwICR7U1JDfS9SZWRpcmVjdEhhbmRsZXJzLmhwcAogCiAjIyBPUzM5MEJBVENICmRpZmYgLS1naXQgYS9zYW1wbGVzL1NBWENvdW50L01ha2VmaWxlLmluIGIvc2FtcGxlcy9TQVhDb3VudC9NYWtlZmlsZS5pbgppbmRleCBmZTVlZjVhLi45OTM1YmRhIDEwMDY0NAotLS0gYS9zYW1wbGVzL1NBWENvdW50L01ha2VmaWxlLmluCisrKyBiL3NhbXBsZXMvU0FYQ291bnQvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDExIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MzAgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAyMDozNDo1MSAgcmFodWxqCisjIFJlcGxhY2VkIFhNTDRDUk9PVCB3aXRoIFhFUkNFU0NST09ULgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjMwICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0Mzo0MCAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODMsMTAgKzg2LDEwIEBACiAKIEFQUF9OQU1FPVNBWENvdW50CiAKLU9VVERJUj0gJHtYTUw0Q1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KLUVYRUM9CSR7WE1MNENST09UfS9iaW4KK09VVERJUj0gJHtYRVJDRVNDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQorRVhFQz0JJHtYRVJDRVNDUk9PVH0vYmluCiBPQkpTPQkke09VVERJUn0vU0FYQ291bnQubyAke09VVERJUn0vU0FYQ291bnRIYW5kbGVycy5vCi1TUkM9CSR7WE1MNENST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CitTUkM9CSR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KIEhFQURFUl9GSUxFUz0ke1NSQ30vU0FYQ291bnQuaHBwICR7U1JDfS9TQVhDb3VudEhhbmRsZXJzLmhwcAogCiAjIyBPUzM5MEJBVENICmRpZmYgLS1naXQgYS9zYW1wbGVzL1NBWFByaW50L01ha2VmaWxlLmluIGIvc2FtcGxlcy9TQVhQcmludC9NYWtlZmlsZS5pbgppbmRleCBlYTA4MjkyLi43YWNkNmIxIDEwMDY0NAotLS0gYS9zYW1wbGVzL1NBWFByaW50L01ha2VmaWxlLmluCisrKyBiL3NhbXBsZXMvU0FYUHJpbnQvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDExIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjggIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAyMDozNDo1NSAgcmFodWxqCisjIFJlcGxhY2VkIFhNTDRDUk9PVCB3aXRoIFhFUkNFU0NST09ULgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjI4ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0Mzo0MSAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODMsMTAgKzg2LDEwIEBACiAKIEFQUF9OQU1FPVNBWFByaW50CiAKLU9VVERJUj0gJHtYTUw0Q1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KLUVYRUM9CSR7WE1MNENST09UfS9iaW4KK09VVERJUj0gJHtYRVJDRVNDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQorRVhFQz0JJHtYRVJDRVNDUk9PVH0vYmluCiBPQkpTPQkke09VVERJUn0vU0FYUHJpbnQubyAke09VVERJUn0vU0FYUHJpbnRIYW5kbGVycy5vCi1TUkM9CSR7WE1MNENST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CitTUkM9CSR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KIEhFQURFUl9GSUxFUz0ke1NSQ30vU0FYUHJpbnQuaHBwICR7U1JDfS9TQVhQcmludEhhbmRsZXJzLmhwcAogCiAjIyBPUzM5MEJBVENICmRpZmYgLS1naXQgYS9zYW1wbGVzL1N0ZEluUGFyc2UvTWFrZWZpbGUuaW4gYi9zYW1wbGVzL1N0ZEluUGFyc2UvTWFrZWZpbGUuaW4KaW5kZXggZmJkMjIxNS4uOTk5MTU0NSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9TdGRJblBhcnNlL01ha2VmaWxlLmluCisrKyBiL3NhbXBsZXMvU3RkSW5QYXJzZS9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToyNiAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDIwOjM1OjAyICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjYgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQzOjQyICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04MywxMCArODYsMTAgQEAKIAogQVBQX05BTUU9U3RkSW5QYXJzZQogCi1PVVRESVI9ICR7WE1MNENST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9Ci1FWEVDPQkke1hNTDRDUk9PVH0vYmluCitPVVRESVI9ICR7WEVSQ0VTQ1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KK0VYRUM9CSR7WEVSQ0VTQ1JPT1R9L2JpbgogT0JKUz0JJHtPVVRESVJ9L1N0ZEluUGFyc2UubyAke09VVERJUn0vU3RkSW5QYXJzZUhhbmRsZXJzLm8KLVNSQz0JJHtYTUw0Q1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KK1NSQz0JJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQogSEVBREVSX0ZJTEVTPSR7U1JDfS9TdGRJblBhcnNlLmhwcCAke1NSQ30vU3RkSW5QYXJzZUhhbmRsZXJzLmhwcAogCiAjIyBPUzM5MEJBVENICmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbmZpZ3VyZSBiL3NhbXBsZXMvY29uZmlndXJlCmluZGV4IDc0MzYxODAuLjJlMDEyN2UgMTAwNzU1Ci0tLSBhL3NhbXBsZXMvY29uZmlndXJlCisrKyBiL3NhbXBsZXMvY29uZmlndXJlCkBAIC0xMzE0LDYgKzEzMTQsMTUgQEAKIGNvbXBpbGVyPSR7Q1hYfQogCiAKKyMgcHJlZml4PSR7cHJlZml4fQorCisKK2N4eGZsYWdzPSR7Q1hYRkxBR1N9CisKKworY2ZsYWdzPSR7Q0ZMQUdTfQorCisKIHRyYXAgJycgMSAyIDE1CiBjYXQgPiBjb25mY2FjaGUgPDxcRU9GCiAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKQEAgLTE0MzMsNyArMTQ0MiwxMCBAQAogU0FYUHJpbnQvTWFrZWZpbGUgXAogRE9NUHJpbnQvTWFrZWZpbGUgXAogTWVtUGFyc2UvTWFrZWZpbGUgXAotUmVkaXJlY3QvTWFrZWZpbGUiIHwgc2VkICJzLzpbXiBdKi8vZyJgIGNvbmZ0ZXN0KjsgZXhpdCAxJyAxIDIgMTUKK1JlZGlyZWN0L01ha2VmaWxlIFwKK1BQYXJzZS9NYWtlZmlsZSBcCitTdGRJblBhcnNlL01ha2VmaWxlIFwKK0VudW1WYWwvTWFrZWZpbGUiIHwgc2VkICJzLzpbXiBdKi8vZyJgIGNvbmZ0ZXN0KjsgZXhpdCAxJyAxIDIgMTUKIEVPRgogY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCiAKQEAgLTE0ODAsNiArMTQ5Miw4IEBACiBzJUBob3N0X29zQCUkaG9zdF9vcyVnCiBzJUBwbGF0Zm9ybUAlJHBsYXRmb3JtJWcKIHMlQGNvbXBpbGVyQCUkY29tcGlsZXIlZworcyVAY3h4ZmxhZ3NAJSRjeHhmbGFncyVnCitzJUBjZmxhZ3NAJSRjZmxhZ3MlZwogCiBDRU9GCiBFT0YKQEAgLTE1MjcsNyArMTU0MSwxMCBAQAogU0FYUHJpbnQvTWFrZWZpbGUgXAogRE9NUHJpbnQvTWFrZWZpbGUgXAogTWVtUGFyc2UvTWFrZWZpbGUgXAotUmVkaXJlY3QvTWFrZWZpbGUifQorUmVkaXJlY3QvTWFrZWZpbGUgXAorUFBhcnNlL01ha2VmaWxlIFwKK1N0ZEluUGFyc2UvTWFrZWZpbGUgXAorRW51bVZhbC9NYWtlZmlsZSJ9CiBFT0YKIGNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKIGZvciBhY19maWxlIGluIC4uICRDT05GSUdfRklMRVM7IGRvIGlmIHRlc3QgIngkYWNfZmlsZSIgIT0geC4uOyB0aGVuCkBAIC0xNTk4LDMgKzE2MTUsNCBAQAogcm0gLWZyIGNvbmZkZWZzKiAkYWNfY2xlYW5fZmlsZXMKIHRlc3QgIiRub19jcmVhdGUiID0geWVzIHx8ICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRDT05GSUdfU1RBVFVTIHx8IGV4aXQgMQogCisKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29uZmlndXJlLmluIGIvc2FtcGxlcy9jb25maWd1cmUuaW4KaW5kZXggOGNhODYwMi4uZGQ5OWY1NSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9jb25maWd1cmUuaW4KKysrIGIvc2FtcGxlcy9jb25maWd1cmUuaW4KQEAgLTYwLDUgKzYwLDYgQEAKIE1lbVBhcnNlL01ha2VmaWxlIFwKIFJlZGlyZWN0L01ha2VmaWxlIFwKIFBQYXJzZS9NYWtlZmlsZSBcCi1TdGRJblBhcnNlL01ha2VmaWxlXSkKK1N0ZEluUGFyc2UvTWFrZWZpbGUgXAorRW51bVZhbC9NYWtlZmlsZV0pCiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVuQ29uZmlndXJlIGIvc2FtcGxlcy9ydW5Db25maWd1cmUKaW5kZXggZDcwMzE2NS4uYzhhOTZhZiAxMDA3NTUKLS0tIGEvc2FtcGxlcy9ydW5Db25maWd1cmUKKysrIGIvc2FtcGxlcy9ydW5Db25maWd1cmUKQEAgLTU4LDggKzU4LDQ0IEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjYgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8wMiAxODoxMDo1MSAgZGlya3gKKyMgQ2hhbmdlZCBleGl0IGNvZGVzIGZyb20gLTEgdG8gJzEnLiBBZGRlZCBpbmRpcmVjdGlvbi4KKyMKKyMgRGF0ZTogVGh1LCAyIERlYyAxOTk5IDE3OjQ3OjM5ICswMDAwCisjIEZyb206IEpvbmF0aGFuIE1jRG93ZWxsIDxub29kbGVzQGVhcnRoLmxpPgorIyBSZXBseS1UbzogeGVyY2VzLWRldkB4bWwuYXBhY2hlLm9yZworIyBUbzogeGVyY2VzLWRldkB4bWwuYXBhY2hlLm9yZywgcmFodWxqQGFwYWNoZS5vcmcKKyMgU3ViamVjdDogUmU6IHJ1bkNvbmZpZ3VyZSBzY3JpcHQgJiBiYXNoCisjCisjCisjIE9uIE1vbiwgTm92IDI5LCAxOTk5IGF0IDEwOjI5OjEzQU0gLTA4MDAsIFJhaHVsIEphaW4gd3JvdGU6CisjCisjID4gPiBJJ20gcXVpdGUgaGFwcHkgdG8gcHJvZHVjZSBhIHBhdGNoIHRoYXQgbWFrZXMgaXQgd29yayB1bmRlciBib3RoCisjID4gPiBGcmVlQlNEJ3Mgc2ggYW5kIGJhc2ggLSBJIHdvdWxkIGFzc3VtZSB0aGlzIHdvdWxkIHdvcmsgdW5kZXIgbW9zdCBzaAorIyA+ID4gbGlrZSBzaGVsbHMuCisjID4gUGxlYXNlIHBvc3QgdGhlIGNoYW5nZXMgZm9yIEZyZWVCU0QgYW5kIEkgd2lsbCB0ZXN0IHRoZSBjaGFuZ2VzIG9uCisjID4gb3RoZXIgdW5peCdzIGFuZCBkbyB0aGUgaW50ZWdyYXRpb24uCisjCisjIEkgc2F0IGRvd24gdG8gZG8gdGhpcyB0b2RheSBhbmQgZm91bmQgdGhhdCBpdCBjYW4gYmUgdHJpdmlhbGx5IGZpeGVkIGJ5CisjIGNoYW5naW5nIGFsbCB0aGUgImV4aXQgLTEiIGluc3RhbmNlcyB0byAiZXhpdCAxIiAtIGl0IHNlZW1zIHRoZSAvYmluL3NoCisjIHdpdGggRnJlZUJTRCBkb2Vzbid0IGxpa2UgbmVnYXRpdmUgcmVzdWx0IGNvZGVzLiBJdCBzZWVtcyBhIGJpdAorIyBwb2ludGxlc3MgdG8gc3VibWl0IGEgcGF0Y2ggZm9yIHRoaXMsIHNvIGNhbiBzb21lb25lIHdpdGggQ1ZTIGFjY2VzcworIyBjaGFuZ2UgdGhpcyBwbGVhc2U/CisjCisjIEouCisjCisjIC0tCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTIgMTk6MTI6NDAgIGFiYWdjaGkKKyMgQ2hhbmdlZCBpbnN0YW5jZXMgb2YgWE1MNENST09UIHRvIFhFUkNFU0NST09UCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjYgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQzOjM0ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04MiwyNCArMTE4LDI2IEBACiAgICAgZWNobyAiICAgICAgIC1oIChnZXQgaGVscCBvbiB0aGUgYWJvdmUgY29tbWFuZHMpIgogfQogCitFUlJPUl9FWElUX0NPREU9MQorCiBpZiB0ZXN0ICR7MX1vID0gIm8iOyB0aGVuCiAgICB1c2FnZQotICAgZXhpdCAtMQorICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX0KIGZpCiAKLWlmIHRlc3QgJHtYTUw0Q1JPT1R9byA9ICJvIjsgdGhlbgotICAgZWNobyBFUlJPUiA6IFlvdSBoYXZlIG5vdCBzZXQgeW91ciBYTUw0Q1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUKK2lmIHRlc3QgJHtYRVJDRVNDUk9PVH1vID0gIm8iOyB0aGVuCisgICBlY2hvIEVSUk9SIDogWW91IGhhdmUgbm90IHNldCB5b3VyIFhFUkNFU0NST09UIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICBlY2hvIFRob3VnaCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggY3JlYXRpbmcgbWFrZWZpbGVzLAogICAgZWNobyB0aGlzIGlzIGp1c3QgYSBnZW5lcmFsIHdhcm5pbmcgdG8gcHJldmVudCB5b3UgZnJvbSBwaXRmYWxscyBpbiBmdXR1cmUuIFBsZWFzZQotICAgZWNobyBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIFhNTDRDUk9PVCB0byBpbmRpY2F0ZSB3aGVyZSB5b3UgaW5zdGFsbGVkCi0gICBlY2hvIHRoZSBYTUw0QyBmaWxlcywgYW5kIHJ1biB0aGlzIGNvbW1hbmQgYWdhaW4gdG8gcHJvY2VlZC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uCisgICBlY2hvIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgWEVSQ0VTQ1JPT1QgdG8gaW5kaWNhdGUgd2hlcmUgeW91IGluc3RhbGxlZAorICAgZWNobyB0aGUgWEVSQ0VTLUMgZmlsZXMsIGFuZCBydW4gdGhpcyBjb21tYW5kIGFnYWluIHRvIHByb2NlZWQuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbgogICAgZWNobyBmb3IgYW4gZXhhbXBsZSBpZiB5b3UgYXJlIHN0aWxsIGNvbmZ1c2VkLgotICAgZXhpdCAtMQorICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX0KIGZpCiAKIGlmIHRlc3QgJDEgPSAiLWgiOyB0aGVuCiAgICB1c2FnZQotICAgZXhpdCAtMQorICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX0KIGZpCiAKICMgR2V0IHRoZSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycwpAQCAtMTA3LDcgKzE0NSw3IEBACiBpZiBbICQ/ICE9IDAgXQogICAgdGhlbgogICAgdXNhZ2UKLSAgIGV4aXQgLTEKKyAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9CiBmaQogCiAjIFNldCB1cCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGVhY2ggcGFyYW1ldGVyCkBAIC0xMzMsNyArMTcxLDcgQEAKIAogICAgLWgpCiAgICAgICAgIHVzYWdlCi0gICAgICAgIGV4aXQgLTE7OworICAgICAgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfTs7CiAKICAgIC0tKQogICAgICAgICBzaGlmdDsgYnJlYWs7OwpAQCAtMTU5LDcgKzE5Nyw3IEBACiAgICAgICAgOzsKICAgICopCiAgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIHBsYXRmb3JtICckcGxhdGZvcm0nLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgZXhpdCAtMTs7CisgICAgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfTs7CiBlc2FjCiAKICMgU2V0IHRoZSBDIGNvbXBpbGVyIGFuZCBDKysgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzCkBAIC0yMDAsNyArMjM4LDcgQEAKIAogZWNobwogZWNobyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBhYm92ZSBjb21tYW5kcyBsb29rIE9LIHRvIHlvdSwgZ28gdG8gdGhlIGRpcmVjdG9yeQotZWNobyAke1hNTDRDUk9PVH0vc3JjIGFuZCB0eXBlIFwibWFrZVwiIHRvIG1ha2UgdGhlIFhNTDRDIHN5c3RlbS4KK2VjaG8gJHtYRVJDRVNDUk9PVH0vc3JjIGFuZCB0eXBlIFwibWFrZVwiIHRvIG1ha2UgdGhlIFhFUkNFUy1DIHN5c3RlbS4KIAogZXhpdCAwOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL1dpbjMyL2NjZC5jbWQgYi9zY3JpcHRzL1dpbjMyL2NjZC5jbWQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzAyOTg2NgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvV2luMzIvY2NkLmNtZApAQCAtMCwwICsxLDgwIEBACitARUNITyBPRkYKKworJURldkRyaXZlJQorCitJRiAiJTEiPT0iYnVpbGQiIEdPVE8gQ0RfQlVJTEQKK0lGICIlMSI9PSJkYXRhIiBHT1RPIENEX0RBVEEKK0lGICIlMSI9PSJkb20iIEdPVE8gQ0RfRE9NCitJRiAiJTEiPT0iZnJhbWV3b3JrIiBHT1RPIENEX0ZSQU1FV09SSworSUYgIiUxIj09ImludGVybmFsIiBHT1RPIENEX0lOVEVSTkFMCitJRiAiJTEiPT0iaW50bCIgR09UTyBDRF9JTlRMCitJRiAiJTEiPT0icGFyc2VycyIgR09UTyBDRF9QQVJTRVJTCitJRiAiJTEiPT0ic2FtcGxlcyIgR09UTyBDRF9TQU1QTEVTCitJRiAiJTEiPT0ic2F4IiBHT1RPIENEX1NBWAorSUYgIiUxIj09InNjcmlwdHMiIEdPVE8gQ0RfU0NSSVBUUworSUYgIiUxIj09InNyYyIgR09UTyBDRF9TUkMKK0lGICIlMSI9PSJ0ZXN0cyIgR09UTyBDRF9URVNUUworSUYgIiUxIj09InRvb2xzIiBHT1RPIENEX1RPT0xTCitJRiAiJTEiPT0idXRpbCIgR09UTyBDRF9VVElMCisKKworRUNITyBVbmtub3duIHRhcmdldCBkaXJlY3RvcnkKK0dPVE8gOkVYSVQKKworOkNEX0JVSUxECitDRCAlWE1MNENSb290JVxCdWlsZFxXaW4zMlxWQzYKK0dPVE8gRVhJVAorCis6Q0RfREFUQQorQ0QgJVhNTDRDUm9vdCVcc2FtcGxlc1xkYXRhCitHT1RPIEVYSVQKKworOkNEX0RPTQorQ0QgJVhNTDRDUm9vdCVcc3JjXGRvbQorR09UTyBFWElUCisKKzpDRF9GUkFNRVdPUksKK0NEICVYTUw0Q1Jvb3QlXHNyY1xmcmFtZXdvcmsKK0dPVE8gRVhJVAorCis6Q0RfSU5URVJOQUwKK0NEICVYTUw0Q1Jvb3QlXHNyY1xpbnRlcm5hbAorR09UTyBFWElUCisKKzpDRF9JTlRMCitDRCAlWE1MNENSb290JVxpbnRsRmlsZXMKK0dPVE8gRVhJVAorCis6Q0RfUEFSU0VSUworQ0QgJVhNTDRDUm9vdCVcc3JjXHBhcnNlcnMKK0dPVE8gRVhJVAorCis6Q0RfU0FNUExFUworQ0QgJVhNTDRDUm9vdCVcc2FtcGxlcworR09UTyBFWElUCisKKzpDRF9TQVgKK0NEICVYTUw0Q1Jvb3QlXHNyY1xzYXgKK0dPVE8gRVhJVAorCis6Q0RfU0NSSVBUUworQ0QgJVhNTDRDUm9vdCVcc2NyaXB0c1xXaW4zMgorR09UTyBFWElUCisKKzpDRF9TUkMKK0NEICVYTUw0Q1Jvb3QlXHNyYworR09UTyBFWElUCisKKzpDRF9URVNUUworQ0QgJVhNTDRDUm9vdCVcdGVzdHMKK0dPVE8gRVhJVAorCis6Q0RfVE9PTFMKK0NEICVYTUw0Q1Jvb3QlXHRvb2xzCitHT1RPIEVYSVQKKworOkNEX1VUSUwKK0NEICVYTUw0Q1Jvb3QlXHNyY1x1dGlsCitHT1RPIEVYSVQKKworOkVYSVQKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZUJpbmFyaWVzLnBsIGIvc2NyaXB0cy9wYWNrYWdlQmluYXJpZXMucGwKaW5kZXggOTcwZWYzZS4uOGU0MTQxOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wYWNrYWdlQmluYXJpZXMucGwKKysrIGIvc2NyaXB0cy9wYWNrYWdlQmluYXJpZXMucGwKQEAgLTMsNDkgKzMsNDQgQEAKIHB1c2goQElOQywgIi9ob21lL3htbDRjL2JpbiIsICIvaG9tZS94bWw0Yy9iaW4vcGVybC9wZXJsLVJVTi9vcHQvcGVybDUvbGliIiwgIi9EZXZlbG9wbWVudDIvY3VwZXJ0L2Jpbi9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiLCAiL0RldmVsb3BtZW50L2N1cGVydC91c3IvbG9jYWwvcGVybC9wZXJsLVJVTi9vcHQvcGVybDUvbGliIik7CiAKIHJlcXVpcmUgImdldG9wdC5wbCI7CityZXF1aXJlIDUuMDsKIAogJHw9MTsgICAjIEZvcmNlIGEgZmx1c2ggYWZ0ZXIgZXZlcnkgcHJpbnQKIAogCiAjIEV4dHJhY3QgdGhlIHNvdXJjZSBhbmQgdGFyZ2V0IGRpcmVjdG9yaWVzCiAmR2V0b3B0KCdzb3BjeG1udHInKTsKLSRYTUw0Q1JPT1QgPSAkb3B0X3M7CiskWEVSQ0VTQ1JPT1QgPSAkb3B0X3M7CiAkdGFyZ2V0ZGlyID0gJG9wdF9vOwotJGNjb21waWxlciA9ICRvcHRfYzsKLSRjcHBjb21waWxlciA9ICRvcHRfeDsKLSRtc2dsb2FkZXIgPSAkb3B0X207Ci0kbmV0YWNjZXNzb3IgPSAkb3B0X247Ci0kdHJhbnNjb2RlciA9ICRvcHRfdDsKLSR0aHJlYWQgPSAkb3B0X3I7CiAKICMgQ2hlY2sgZm9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGV4aXQgaWYgZXJyb3IKLWlmICghbGVuZ3RoKCRYTUw0Q1JPT1QpIHx8ICFsZW5ndGgoJHRhcmdldGRpcikgfHwgKGxlbmd0aCgkb3B0X2gpID4gMCkgKSB7CitpZiAoIWxlbmd0aCgkWEVSQ0VTQ1JPT1QpIHx8ICFsZW5ndGgoJHRhcmdldGRpcikgfHwgKGxlbmd0aCgkb3B0X2gpID4gMCkgKSB7CiAgICAgICAgIHByaW50ICgiVXNhZ2UgaXM6IHBhY2thZ2VCaW5hcmllcyA8b3B0aW9ucz5cbiIpOwotCQlwcmludCAoIiAgICAgICAgICBvcHRpb25zIGFyZTogIC1zIDxzb3VyY2VfZGlyZWN0b3J5PlxuIik7Ci0JCXByaW50ICgiICAgICAgICAgICAgICAgICAgICAgICAgLW8gPHRhcmdldF9kaXJlY3Rvcnk+XG4iKTsKLSAgICAgICAgcHJpbnQgKCIgICAgICAgICAgICAgICAgICAgICAgICAtYyA8QyBjb21waWxlciBuYW1lPiAoZS5nLiBnY2Mgb3IgeGxjKVxuIik7Ci0gICAgICAgIHByaW50ICgiICAgICAgICAgICAgICAgICAgICAgICAgLXggPEMrKyBjb21waWxlciBuYW1lPiAoZS5nLiBnKysgb3IgeGxDKVxuIik7CisJcHJpbnQgKCIgICAgICAgICAgb3B0aW9ucyBhcmU6ICAtcyA8c291cmNlX2RpcmVjdG9yeT5cbiIpOworCXByaW50ICgiICAgICAgICAgICAgICAgICAgICAgICAgLW8gPHRhcmdldF9kaXJlY3Rvcnk+XG4iKTsKKyAgICAgICAgcHJpbnQgKCIgICAgICAgICAgICAgICAgICAgICAgICAtYyA8QyBjb21waWxlciBuYW1lPiAoZS5nLiBnY2MsIGNjIG9yIHhsY19yKVxuIik7CisgICAgICAgIHByaW50ICgiICAgICAgICAgICAgICAgICAgICAgICAgLXggPEMrKyBjb21waWxlciBuYW1lPiAoZS5nLiBnKyssIENDLCBhQ0Mgb3IgeGxDX3IpXG4iKTsKICAgICAgICAgcHJpbnQgKCIgICAgICAgICAgICAgICAgICAgICAgICAtbSA8bWVzc2FnZSBsb2FkZXI+IGNhbiBiZSAnaW5tZW0nLCAnaWN1JyBvciAnaWNvbnYnXG4iKTsKICAgICAgICAgcHJpbnQgKCIgICAgICAgICAgICAgICAgICAgICAgICAtbiA8bmV0IGFjY2Vzc29yPiBjYW4gYmUgJ2ZpbGVvbmx5JyBvciAnbGlid3d3J1xuIik7CiAgICAgICAgIHByaW50ICgiICAgICAgICAgICAgICAgICAgICAgICAgLXQgPHRyYW5zY29kZXI+IGNhbiBiZSAnaWN1JyBvciAnbmF0aXZlJ1xuIik7CiAgICAgICAgIHByaW50ICgiICAgICAgICAgICAgICAgICAgICAgICAgLXIgPHRocmVhZCBvcHRpb24+IGNhbiBiZSAncHRocmVhZCcgb3IgJ2RjZScgKG9ubHkgdXNlZCBvbiBIUC0xMSlcbiIpOwogICAgICAgICBwcmludCAoIiAgICAgICAgICAgICAgICAgICAgICAgIC1oIHRvIGdldCBoZWxwIG9uIHRoZXNlIGNvbW1hbmRzXG4iKTsKLSAgICAgICAgcHJpbnQgKCJFeGFtcGxlOiBwZXJsIHBhY2thZ2VCaW5hcmllcy5wbCAtc1wkSE9NRS94bWw0Y3NyYzNfMF8wIC1vXCRIT01FL3htbDRjM18wXzAgLWNnY2MgLXhnKysgLW1pbm1lbSAtbmZpbGVvbmx5IC10bmF0aXZlXG4iKTsKKyAgICAgICAgcHJpbnQgKCJFeGFtcGxlOiBwZXJsIHBhY2thZ2VCaW5hcmllcy5wbCAtc1wkSE9NRS94ZXJjZXMtY18xXzBfMGQwMSAtb1wkSE9NRS94ZXJjZXMtY18xXzBfMGQwMWJpbiAtY2djYyAteGcrKyAtbWlubWVtIC1uZmlsZW9ubHkgLXRuYXRpdmVcbiIpOwogICAgICAgICBleGl0KC0xKTsKIH0KIAogIyBTZXQgdXAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgSUNVCi0jIEFzIG9mIFZlcnNpb24gMywgSUNVIGlzIG5vdCBhIHJlcXVpcmVkIGNvbXBvbmVudCBvZiBYTUw0QworIyBBcyBvZiBWZXJzaW9uIDMsIElDVSBpcyBub3QgYSByZXF1aXJlZCBjb21wb25lbnQgb2YgWEVSQ0VTLUMKICRJQ1VST09UID0gJEVOVnsnSUNVUk9PVCd9OwogaWYgKCFsZW5ndGgoJElDVVJPT1QpKSB7CiAgICAgICAgcHJpbnQgIllvdSBoYXZlIG5vdCBkZWZpbmVkIHlvdXIgSUNVIGluc3RhbGwgZGlyZWN0b3J5LlxuIjsKLQkgICBwcmludCAiWW91IG11c3Qgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBJQ1VST09UIHRvIHBhY2thZ2UgSUNVIHdpdGggWE1MNEMuXG4iOwotCSAgIHByaW50ICJQcm9jZWVkaW5nIHRvIGJ1aWxkIFhNTDRDIHdpdGhvdXQgSUNVLi4uXG4iOworCSAgIHByaW50ICJZb3UgbXVzdCBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIElDVVJPT1QgdG8gcGFja2FnZSBJQ1Ugd2l0aCBYRVJDRVMtQy5cbiI7CisJICAgcHJpbnQgIlByb2NlZWRpbmcgdG8gYnVpbGQgWEVSQ0VTLUMgd2l0aG91dCBJQ1UuLi5cbiI7CiB9CiAKICMgQ2hlY2sgaWYgdGhlIHNvdXJjZSBkaXJlY3RvcnkgZXhpc3RzIG9yIG5vdAotaWYgKCEoLWUgJFhNTDRDUk9PVCkpIHsKLSAgICAgICAgcHJpbnQgKCJUaGUgZGlyZWN0b3J5ICRYTUw0Q1JPT1QgZG9lcyBub3QgZXhpc3QuIENhbm5vdCBwcm9jZWVkIGFueSBmdXJ0aGVyLlxuIik7CitpZiAoISgtZSAkWEVSQ0VTQ1JPT1QpKSB7CisgICAgICAgIHByaW50ICgiVGhlIGRpcmVjdG9yeSAkWEVSQ0VTQ1JPT1QgZG9lcyBub3QgZXhpc3QuIENhbm5vdCBwcm9jZWVkIGFueSBmdXJ0aGVyLlxuIik7CiAgICAgICAgIGV4aXQoLTEpOwogfQogCkBAIC01Nyw3ICs1Miw3IEBACiB9CiAKICNGaXggdGhlIGJhY2tzbGFzaGVzIG9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtCi0kWE1MNENST09UID1+IHMvXFwvXC8vZzsKKyRYRVJDRVNDUk9PVCA9fiBzL1xcL1wvL2c7CiAkSUNVUk9PVCA9fiBzL1xcL1wvL2c7CiAkdGFyZ2V0ZGlyID1+IHMvXFwvXC8vZzsKIApAQCAtNjUsMTYgKzYwLDE0IEBACiBvcGVuKFBMQVRGT1JNLCAidW5hbWUgLXN8Iik7CiAkcGxhdGZvcm0gPSA8UExBVEZPUk0+OwogY2hvbXAoJHBsYXRmb3JtKTsKLSMkcGxhdGZvcm0gPX4gbS8oXlx3Kilccy87Ci0jJHBsYXRmb3JtID0gJDE7CiBjbG9zZSAoUExBVEZPUk0pOwogCiBwcmludCAiUGFja2FnaW5nIGJpbmFyaWVzIGZvciBcYCIgLiAkcGxhdGZvcm0gLiAiXGAgaW4gIiAuICR0YXJnZXRkaXIgLiAiIC4uLlxuIjsKIAogI0NvbnN0cnVjdCB0aGUgbmFtZSBvZiB0aGUgemlwIGZpbGUgYnkgZXh0cmFjdGluZyB0aGUgbGFzdCBkaXJlY3RvcnkgbmFtZQogJHppcGZpbGVzID0gJHRhcmdldGRpcjsKLSR6aXBmaWxlcyA9fiBtL1wvKFx3KiQpLzsKLSR6aXBmaWxlcyA9ICQxIC4gIi8qIjsKKyR6aXBmaWxlcyA9fiBzLy4qXC8oW1x3fC1dKikkLyQxL2c7CiskemlwZmlsZXMgPSAkemlwZmlsZXMgLiAiLyoiOwogCiAkYnVpbGRtb2RlID0gIlJlbGVhc2UiOyAgICAjIFVuaXZlcnNhbGx5LCB3aHkgZG8geW91IHdhbnQgdG8gcGFja2FnZSBEZWJ1ZyBidWlsZHMgYW55d2F5PwogCkBAIC0xMTIsMTU3ICsxMDUsMjIzIEBACiAgICAgICAgIG1rZGlyICgkdGFyZ2V0ZGlyIC4gIi9zYW1wbGVzL01lbVBhcnNlIiwgIjA2NDQiKTsKICAgICAgICAgbWtkaXIgKCR0YXJnZXRkaXIgLiAiL3NhbXBsZXMvUFBhcnNlIiwgIjA2NDQiKTsKICAgICAgICAgbWtkaXIgKCR0YXJnZXRkaXIgLiAiL3NhbXBsZXMvU3RkSW5QYXJzZSIsICIwNjQ0Iik7CisgICAgICAgIG1rZGlyICgkdGFyZ2V0ZGlyIC4gIi9zYW1wbGVzL0VudW1WYWwiLCAiMDY0NCIpOwogICAgICAgICBta2RpciAoJHRhcmdldGRpciAuICIvZG9jIiwgIjA2NDQiKTsKICAgICAgICAgbWtkaXIgKCR0YXJnZXRkaXIgLiAiL2RvYy9hcGlEb2NzIiwgIjA2NDQiKTsKLSAgICAgICAgbWtkaXIgKCR0YXJnZXRkaXIgLiAiL2Jpbi9pY3UiLCAiMDY0NCIpOwotICAgICAgICBta2RpciAoJHRhcmdldGRpciAuICIvYmluL2ljdS9kYXRhIiwgIjA2NDQiKTsKKwlpZiAoIGxlbmd0aCgkSUNVUk9PVCkgPiAwICkgeworCSAgICBta2RpciAoJHRhcmdldGRpciAuICIvYmluL2ljdSIsICIwNjQ0Iik7CisJICAgIG1rZGlyICgkdGFyZ2V0ZGlyIC4gIi9iaW4vaWN1L2RhdGEiLCAiMDY0NCIpOworCX0KIAotICAgICAgICAjQ2xlYW4gdXAgYWxsIHRoZSBkZXBlbmRlbmN5IGZpbGVzLCBjYXVzZXMgcHJvYmxlbXMgZm9yIG5tYWtlCi0JCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgewotCQkJY2hkaXIgKCIkSUNVUk9PVCIpOwotCQkJc3lzdGVtICgiZGVsIC9zIC9mICouZGVwIik7CisJaWYgKGxlbmd0aCgkSUNVUk9PVCkgPiAwKSB7CisJCWNoZGlyICgiJElDVVJPT1QiKTsKKwkJI0NsZWFuIHVwIGFsbCB0aGUgZGVwZW5kZW5jeSBmaWxlcywgY2F1c2VzIHByb2JsZW1zIGZvciBubWFrZQorCQlzeXN0ZW0gKCJkZWwgL3MgL2YgKi5kZXAgKi5uY2IgKi5wbGcgKi5vcHQiKTsKIAotCQkJcHJpbnQgKCJTaW5jZSB5b3UgaGF2ZSBkZWZpbmVkIElDVVJPT1QgaW4geW91ciBlbnZpcm9ubWVudCwgSSBhbSBidWlsZGluZyBJQ1UgdG9vIC4uLiIpOwotCQkJIyBNYWtlIHRoZSBpY3UgZGxsCi0JCQljaGRpciAoIiRJQ1VST09UL3NvdXJjZS9jb21tb24iKTsKLQkJCXByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIGNvbW1vbi5tYWsgY2xlYW4gQ0ZHPVwiY29tbW9uIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotCQkJc3lzdGVtKCJubWFrZSAtZiBjb21tb24ubWFrIGNsZWFuIENGRz1cImNvbW1vbiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7Ci0JCQlwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBjb21tb24ubWFrIGFsbCBDRkc9XCJjb21tb24gLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7Ci0JCQlzeXN0ZW0oIm5tYWtlIC1mIGNvbW1vbi5tYWsgYWxsIENGRz1cImNvbW1vbiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisJCXByaW50ICgiU2luY2UgeW91IGhhdmUgZGVmaW5lZCBJQ1VST09UIGluIHlvdXIgZW52aXJvbm1lbnQsIEkgYW0gYnVpbGRpbmcgSUNVIHRvbyAuLi5cbiIpOworCQkjIE1ha2UgdGhlIGljdSBkbGwKKwkJY2hkaXIgKCIkSUNVUk9PVC9zb3VyY2UvY29tbW9uIik7CisJCSMgTk9URTogRGVsZXRlIHRoZSBuZXh0IGxpbmUgaWYgJ25tYWtlIGNsZWFuJyBicmVha3MgdGhlIGJ1aWxkCisJCXByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIGNvbW1vbi5tYWsgY2xlYW4gQ0ZHPVwiY29tbW9uIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworCQkjc3lzdGVtKCJubWFrZSAtZiBjb21tb24ubWFrIGNsZWFuIENGRz1cImNvbW1vbiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisJCXN5c3RlbSgibXNkZXYgY29tbW9uLmRzcCAvTUFLRSBcImNvbW1vbiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9DTEVBTiIpOworCQlwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBjb21tb24ubWFrIGFsbCBDRkc9XCJjb21tb24gLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisJCSNzeXN0ZW0oIm5tYWtlIC1mIGNvbW1vbi5tYWsgYWxsIENGRz1cImNvbW1vbiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisJCXN5c3RlbSgibXNkZXYgY29tbW9uLmRzcCAvTUFLRSBcImNvbW1vbiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9SRUJVSUxEIik7CiAKLQkJCSMgTWFrZSB0aGUgbWFrZWNvbnYgdXRpbGl0eQotCQkJY2hkaXIgKCIkSUNVUk9PVC9zb3VyY2UvdG9vbHMvbWFrZWNvbnYiKTsKLQkJCXN5c3RlbSAibm1ha2UgLWYgbWFrZWNvbnYubWFrIGNsZWFuIENGRz1cIm1ha2Vjb252IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotCQkJcHJpbnQgIkV4ZWN1dGluZzogbm1ha2UgLWYgbWFrZWNvbnYubWFrIENGRz1cIm1ha2Vjb252IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotCQkJc3lzdGVtKCJubWFrZSAtZiBtYWtlY29udi5tYWsgQ0ZHPVwibWFrZWNvbnYgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOworCQkjIE1ha2UgdGhlIHRvb2x1dGlsLmxpYgorCQlpZiAoIC1lICIkSUNVUk9PVC9zb3VyY2UvdG9vbHMvdG9vbHV0aWwiICkgeworCQkgICAgY2hkaXIgKCIkSUNVUk9PVC9zb3VyY2UvdG9vbHMvdG9vbHV0aWwiKTsKKwkJICAgICMgTk9URTogRGVsZXRlIHRoZSBuZXh0IGxpbmUgaWYgJ25tYWtlIGNsZWFuJyBicmVha3MgdGhlIGJ1aWxkCisJCSAgICAjc3lzdGVtICJubWFrZSAtZiBtYWtlY29udi5tYWsgY2xlYW4gQ0ZHPVwibWFrZWNvbnYgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisJCSAgICBzeXN0ZW0oIm1zZGV2IHRvb2x1dGlsLmRzcCAvTUFLRSBcInRvb2x1dGlsIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIgL0NMRUFOIik7CisJCSAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiB0b29sdXRpbC5tYWsgQ0ZHPVwidG9vbHV0aWwgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisJCSAgICAjc3lzdGVtKCJubWFrZSAtZiBtYWtlY29udi5tYWsgQ0ZHPVwibWFrZWNvbnYgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOworCQkgICAgc3lzdGVtKCJtc2RldiB0b29sdXRpbC5kc3AgL01BS0UgXCJ0b29sdXRpbCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9SRUJVSUxEIik7CiAJCX0KIAotICAgICAgICAjQ2xlYW4gdXAgYWxsIHRoZSBkZXBlbmRlbmN5IGZpbGVzLCBjYXVzZXMgcHJvYmxlbXMgZm9yIG5tYWtlCi0gICAgICAgIGNoZGlyICgiJFhNTDRDUk9PVCIpOwotICAgICAgICBzeXN0ZW0gKCJkZWwgL3MgL2YgKi5kZXAiKTsKKwkJIyBNYWtlIHRoZSBtYWtlY29udiB1dGlsaXR5CisJCWNoZGlyICgiJElDVVJPT1Qvc291cmNlL3Rvb2xzL21ha2Vjb252Iik7CisJCSMgTk9URTogRGVsZXRlIHRoZSBuZXh0IGxpbmUgaWYgJ25tYWtlIGNsZWFuJyBicmVha3MgdGhlIGJ1aWxkCisJCSNzeXN0ZW0gIm5tYWtlIC1mIG1ha2Vjb252Lm1hayBjbGVhbiBDRkc9XCJtYWtlY29udiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKwkJc3lzdGVtKCJtc2RldiBtYWtlY29udi5kc3AgL01BS0UgXCJtYWtlY29udiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9DTEVBTiIpOworCQlwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBtYWtlY29udi5tYWsgQ0ZHPVwibWFrZWNvbnYgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisJCSNzeXN0ZW0oIm5tYWtlIC1mIG1ha2Vjb252Lm1hayBDRkc9XCJtYWtlY29udiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisJCXN5c3RlbSgibXNkZXYgbWFrZWNvbnYuZHNwIC9NQUtFIFwibWFrZWNvbnYgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiAvUkVCVUlMRCIpOworCX0KIAotICAgICAgICAjIE1ha2UgdGhlIFhNTDRDIGRsbAotICAgICAgICBjaGRpciAoIiRYTUw0Q1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L0lYWE1MNEMzL0lYWE1MNEMzIik7Ci0gICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIFhYTUw0QzMubWFrIGNsZWFuIENGRz1cIklYWE1MNEMzIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotICAgICAgICBzeXN0ZW0oIm5tYWtlIC1mIElYWE1MNEMzLm1hayBjbGVhbiBDRkc9XCJJWFhNTDRDMyAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7Ci0gICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIElYWE1MNEMzLm1hayBhbGwgQ0ZHPVwiSVhYTUw0QzMgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7Ci0gICAgICAgIHN5c3RlbSgibm1ha2UgLWYgSVhYTUw0QzMubWFrIGFsbCBDRkc9XCJJWFhNTDRDMyAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisgICAgICAgICMgQ2xlYW4gdXAgYWxsIHRoZSBkZXBlbmRlbmN5IGZpbGVzLCBjYXVzZXMgcHJvYmxlbXMgZm9yIG5tYWtlCisJIyBBbHNvIGNsZWFuIHVwIGFsbCBNU1ZDLWdlbmVyYXRlZCBwcm9qZWN0IGZpbGVzIHRoYXQganVzdCBjYWNoZSB0aGUgSURFIHN0YXRlCisgICAgICAgIGNoZGlyICgiJFhFUkNFU0NST09UIik7CisgICAgICAgIHN5c3RlbSAoImRlbCAvcyAvZiAqLmRlcCAqLm5jYiAqLnBsZyAqLm9wdCIpOworCisgICAgICAgICMgTWFrZSB0aGUgWEVSQ0VTLUMgZGxsCisgICAgICAgIGNoZGlyICgiJFhFUkNFU0NST09UL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1hlcmNlc0xpYiIpOworICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBYZXJjZXNMaWIubWFrIGNsZWFuIENGRz1cIlhlcmNlc0xpYiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKyAgICAgICAgI3N5c3RlbSgibm1ha2UgLWYgWGVyY2VzTGliLm1hayBjbGVhbiBDRkc9XCJYZXJjZXNMaWIgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOworCXN5c3RlbSgibXNkZXYgWGVyY2VzTGliLmRzcCAvTUFLRSBcIlhlcmNlc0xpYiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9DTEVBTiIpOworICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBYZXJjZXNMaWIubWFrIGFsbCBDRkc9XCJYZXJjZXNMaWIgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisgICAgICAgICNzeXN0ZW0oIm5tYWtlIC1mIFhlcmNlc0xpYi5tYWsgYWxsIENGRz1cIlhlcmNlc0xpYiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisJc3lzdGVtKCJtc2RldiBYZXJjZXNMaWIuZHNwIC9NQUtFIFwiWGVyY2VzTGliIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIgL1JFQlVJTEQiKTsKIAogICAgICAgICAjIE1ha2UgdGhlIFNBWENvdW50IHNhbXBsZQotICAgICAgICBjaGRpciAoIiRYTUw0Q1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L0lYWE1MNEMzL1NBWENvdW50Iik7Ci0gICAgICAgIHN5c3RlbSAibm1ha2UgLWYgU0FYQ291bnQubWFrIGNsZWFuIENGRz1cIlNBWENvdW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhDb3VudCIpOworICAgICAgICAjc3lzdGVtICJubWFrZSAtZiBTQVhDb3VudC5tYWsgY2xlYW4gQ0ZHPVwiU0FYQ291bnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisJc3lzdGVtKCJtc2RldiBTQVhDb3VudC5kc3AgL01BS0UgXCJTQVhDb3VudCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9DTEVBTiIpOwogICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBTQVhDb3VudC5tYWsgYWxsIENGRz1cIlNBWENvdW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotICAgICAgICBzeXN0ZW0oIm5tYWtlIC1mIFNBWENvdW50Lm1hayBhbGwgQ0ZHPVwiU0FYQ291bnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOworICAgICAgICAjc3lzdGVtKCJubWFrZSAtZiBTQVhDb3VudC5tYWsgYWxsIENGRz1cIlNBWENvdW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKwlzeXN0ZW0oIm1zZGV2IFNBWENvdW50LmRzcCAvTUFLRSBcIlNBWENvdW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIgL1JFQlVJTEQiKTsKIAogICAgICAgICAjIE1ha2UgdGhlIFNBWFByaW50IHNhbXBsZQotICAgICAgICBjaGRpciAoIiRYTUw0Q1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L0lYWE1MNEMzL1NBWFByaW50Iik7Ci0gICAgICAgIHN5c3RlbSAibm1ha2UgLWYgU0FYUHJpbnQubWFrIGNsZWFuIENGRz1cIlNBWFByaW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhQcmludCIpOworICAgICAgICAjc3lzdGVtICJubWFrZSAtZiBTQVhQcmludC5tYWsgY2xlYW4gQ0ZHPVwiU0FYUHJpbnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisJc3lzdGVtKCJtc2RldiBTQVhQcmludC5kc3AgL01BS0UgXCJTQVhQcmludCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9DTEVBTiIpOwogICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBTQVhQcmludC5tYWsgYWxsIENGRz1cIlNBWFByaW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotICAgICAgICBzeXN0ZW0oIm5tYWtlIC1mIFNBWFByaW50Lm1hayBhbGwgQ0ZHPVwiU0FYUHJpbnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOworICAgICAgICAjc3lzdGVtKCJubWFrZSAtZiBTQVhQcmludC5tYWsgYWxsIENGRz1cIlNBWFByaW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKwlzeXN0ZW0oIm1zZGV2IFNBWFByaW50LmRzcCAvTUFLRSBcIlNBWFByaW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIgL1JFQlVJTEQiKTsKIAogICAgICAgICAjIE1ha2UgdGhlIERPTUNvdW50IHNhbXBsZQotICAgICAgICBjaGRpciAoIiRYTUw0Q1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L0lYWE1MNEMzL0RPTUNvdW50Iik7Ci0gICAgICAgIHN5c3RlbSAibm1ha2UgLWYgRE9NQ291bnQubWFrIGNsZWFuIENGRz1cIkRPTUNvdW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01Db3VudCIpOworICAgICAgICAjc3lzdGVtICJubWFrZSAtZiBET01Db3VudC5tYWsgY2xlYW4gQ0ZHPVwiRE9NQ291bnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisgICAgICAgIHN5c3RlbSgibXNkZXYgRE9NQ291bnQuZHNwIC9NQUtFIFwiRE9NQ291bnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiAvQ0xFQU4iKTsKICAgICAgICAgcHJpbnQgIkV4ZWN1dGluZzogbm1ha2UgLWYgRE9NQ291bnQubWFrIGFsbCBDRkc9XCJET01Db3VudCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKLSAgICAgICAgc3lzdGVtKCJubWFrZSAtZiBET01Db3VudC5tYWsgYWxsIENGRz1cIkRPTUNvdW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKyAgICAgICAgI3N5c3RlbSgibm1ha2UgLWYgRE9NQ291bnQubWFrIGFsbCBDRkc9XCJET01Db3VudCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisJc3lzdGVtKCJtc2RldiBET01Db3VudC5kc3AgL01BS0UgXCJET01Db3VudCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9SRUJVSUxEIik7CiAKICAgICAgICAgIyBNYWtlIHRoZSBET01QcmludCBzYW1wbGUKLSAgICAgICAgY2hkaXIgKCIkWE1MNENST09UL1Byb2plY3RzL1dpbjMyL1ZDNi9JWFhNTDRDMy9ET01QcmludCIpOwotICAgICAgICBzeXN0ZW0gIm5tYWtlIC1mIERPTVByaW50Lm1hayBjbGVhbiBDRkc9XCJET01QcmludCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKyAgICAgICAgY2hkaXIgKCIkWEVSQ0VTQ1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvRE9NUHJpbnQiKTsKKyAgICAgICAgI3N5c3RlbSAibm1ha2UgLWYgRE9NUHJpbnQubWFrIGNsZWFuIENGRz1cIkRPTVByaW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworCXN5c3RlbSgibXNkZXYgRE9NUHJpbnQuZHNwIC9NQUtFIFwiRE9NUHJpbnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiAvQ0xFQU4iKTsKICAgICAgICAgcHJpbnQgIkV4ZWN1dGluZzogbm1ha2UgLWYgRE9NUHJpbnQubWFrIGFsbCBDRkc9XCJET01QcmludCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKLSAgICAgICAgc3lzdGVtKCJubWFrZSAtZiBET01QcmludC5tYWsgYWxsIENGRz1cIkRPTVByaW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKyAgICAgICAgI3N5c3RlbSgibm1ha2UgLWYgRE9NUHJpbnQubWFrIGFsbCBDRkc9XCJET01QcmludCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisJc3lzdGVtKCJtc2RldiBET01QcmludC5kc3AgL01BS0UgXCJET01QcmludCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9SRUJVSUxEIik7CiAKICAgICAgICAgIyBNYWtlIHRoZSBSZWRpcmVjdCBzYW1wbGUKLSAgICAgICAgY2hkaXIgKCIkWE1MNENST09UL1Byb2plY3RzL1dpbjMyL1ZDNi9JWFhNTDRDMy9SZWRpcmVjdCIpOwotICAgICAgICBzeXN0ZW0gIm5tYWtlIC1mIFJlZGlyZWN0Lm1hayBjbGVhbiBDRkc9XCJSZWRpcmVjdCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKyAgICAgICAgY2hkaXIgKCIkWEVSQ0VTQ1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvUmVkaXJlY3QiKTsKKyAgICAgICAgI3N5c3RlbSAibm1ha2UgLWYgUmVkaXJlY3QubWFrIGNsZWFuIENGRz1cIlJlZGlyZWN0IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworCXN5c3RlbSgibXNkZXYgUmVkaXJlY3QuZHNwIC9NQUtFIFwiUmVkaXJlY3QgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiAvQ0xFQU4iKTsKICAgICAgICAgcHJpbnQgIkV4ZWN1dGluZzogbm1ha2UgLWYgUmVkaXJlY3QubWFrIGFsbCBDRkc9XCJSZWRpcmVjdCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKLSAgICAgICAgc3lzdGVtKCJubWFrZSAtZiBSZWRpcmVjdC5tYWsgYWxsIENGRz1cIlJlZGlyZWN0IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKyAgICAgICAgI3N5c3RlbSgibm1ha2UgLWYgUmVkaXJlY3QubWFrIGFsbCBDRkc9XCJSZWRpcmVjdCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisJc3lzdGVtKCJtc2RldiBSZWRpcmVjdC5kc3AgL01BS0UgXCJSZWRpcmVjdCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9SRUJVSUxEIik7CiAKIAogICAgICAgICAjIE1ha2UgdGhlIE1lbVBhcnNlIHNhbXBsZQotICAgICAgICBjaGRpciAoIiRYTUw0Q1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L0lYWE1MNEMzL01lbVBhcnNlIik7Ci0gICAgICAgIHN5c3RlbSAibm1ha2UgLWYgTWVtUGFyc2UubWFrIGNsZWFuIENGRz1cIk1lbVBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9NZW1QYXJzZSIpOworICAgICAgICAjc3lzdGVtICJubWFrZSAtZiBNZW1QYXJzZS5tYWsgY2xlYW4gQ0ZHPVwiTWVtUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisJc3lzdGVtKCJtc2RldiBNZW1QYXJzZS5kc3AgL01BS0UgXCJNZW1QYXJzZSAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9DTEVBTiIpOwogICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBNZW1QYXJzZS5tYWsgYWxsIENGRz1cIk1lbVBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotICAgICAgICBzeXN0ZW0oIm5tYWtlIC1mIE1lbVBhcnNlLm1hayBhbGwgQ0ZHPVwiTWVtUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOworICAgICAgICAjc3lzdGVtKCJubWFrZSAtZiBNZW1QYXJzZS5tYWsgYWxsIENGRz1cIk1lbVBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKwlzeXN0ZW0oIm1zZGV2IE1lbVBhcnNlLmRzcCAvTUFLRSBcIk1lbVBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIgL1JFQlVJTEQiKTsKIAogICAgICAgICAjIE1ha2UgdGhlIFBQYXJzZSBzYW1wbGUKLSAgICAgICAgY2hkaXIgKCIkWE1MNENST09UL1Byb2plY3RzL1dpbjMyL1ZDNi9JWFhNTDRDMy9QUGFyc2UiKTsKLSAgICAgICAgc3lzdGVtICJubWFrZSAtZiBQUGFyc2UubWFrIGNsZWFuIENGRz1cIlBQYXJzZSAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKyAgICAgICAgY2hkaXIgKCIkWEVSQ0VTQ1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvUFBhcnNlIik7CisgICAgICAgICNzeXN0ZW0gIm5tYWtlIC1mIFBQYXJzZS5tYWsgY2xlYW4gQ0ZHPVwiUFBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworCXN5c3RlbSgibXNkZXYgUFBhcnNlLmRzcCAvTUFLRSBcIlBQYXJzZSAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9DTEVBTiIpOwogICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBQUGFyc2UubWFrIGFsbCBDRkc9XCJQUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7Ci0gICAgICAgIHN5c3RlbSgibm1ha2UgLWYgUFBhcnNlLm1hayBhbGwgQ0ZHPVwiUFBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKyAgICAgICAgI3N5c3RlbSgibm1ha2UgLWYgUFBhcnNlLm1hayBhbGwgQ0ZHPVwiUFBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKwlzeXN0ZW0oIm1zZGV2IFBQYXJzZS5kc3AgL01BS0UgXCJQUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiAvUkVCVUlMRCIpOwogCiAgICAgICAgICMgTWFrZSB0aGUgU3RkSW5QYXJzZSBzYW1wbGUKLSAgICAgICAgY2hkaXIgKCIkWE1MNENST09UL1Byb2plY3RzL1dpbjMyL1ZDNi9JWFhNTDRDMy9TdGRJblBhcnNlIik7Ci0gICAgICAgIHN5c3RlbSAibm1ha2UgLWYgU3RkSW5QYXJzZS5tYWsgY2xlYW4gQ0ZHPVwiU3RkSW5QYXJzZSAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKyAgICAgICAgY2hkaXIgKCIkWEVSQ0VTQ1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU3RkSW5QYXJzZSIpOworICAgICAgICAjc3lzdGVtICJubWFrZSAtZiBTdGRJblBhcnNlLm1hayBjbGVhbiBDRkc9XCJTdGRJblBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworCXN5c3RlbSgibXNkZXYgU3RkSW5QYXJzZS5kc3AgL01BS0UgXCJTdGRJblBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIgL0NMRUFOIik7CiAgICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIFN0ZEluUGFyc2UubWFrIGFsbCBDRkc9XCJTdGRJblBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotICAgICAgICBzeXN0ZW0oIm5tYWtlIC1mIFN0ZEluUGFyc2UubWFrIGFsbCBDRkc9XCJTdGRJblBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKyAgICAgICAgI3N5c3RlbSgibm1ha2UgLWYgU3RkSW5QYXJzZS5tYWsgYWxsIENGRz1cIlN0ZEluUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOworCXN5c3RlbSgibXNkZXYgU3RkSW5QYXJzZS5kc3AgL01BS0UgXCJTdGRJblBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIgL1JFQlVJTEQiKTsKIAotCQlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKLQkJCSMgcnVuIG1ha2Vjb252IG5vdwotCQkJY2hkaXIgKCIkSUNVUk9PVC9kYXRhIik7Ci0JCQlvcGVuZGlyIChUSElTRElSLCAiJElDVVJPT1QvZGF0YSIpOwotCQkJQGFsbGZpbGVzID0gZ3JlcCghL15cLlwuPyQvLCByZWFkZGlyKFRISVNESVIpKTsKLQkJCUBhbGx1Y21maWxlcyA9IGdyZXAoL1wudWNtLywgQGFsbGZpbGVzKTsKLQkJCWNsb3NlZGlyKFRISVNESVIpOwotCQkJZm9yZWFjaCAkdWNtZmlsZSAoQGFsbHVjbWZpbGVzKSB7Ci0JCQkJCXN5c3RlbSAoIiRJQ1VST09UL3NvdXJjZS90b29scy9tYWtlY29udi8kYnVpbGRtb2RlL21ha2Vjb252LmV4ZSAkdWNtZmlsZSIpOwotCQkJfQorICAgICAgICAjIE1ha2UgdGhlIEVudW1WYWwgc2FtcGxlCisgICAgICAgIGNoZGlyICgiJFhFUkNFU0NST09UL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0VudW1WYWwiKTsKKyAgICAgICAgI3N5c3RlbSAibm1ha2UgLWYgRW51bVZhbC5tYWsgY2xlYW4gQ0ZHPVwiRW51bVZhbCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKwlzeXN0ZW0oIm1zZGV2IEVudW1WYWwuZHNwIC9NQUtFIFwiRW51bVZhbCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIC9DTEVBTiIpOworICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBFbnVtVmFsLm1hayBhbGwgQ0ZHPVwiRW51bVZhbCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKyAgICAgICAgI3N5c3RlbSgibm1ha2UgLWYgRW51bVZhbC5tYWsgYWxsIENGRz1cIkVudW1WYWwgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOworCXN5c3RlbSgibXNkZXYgRW51bVZhbC5kc3AgL01BS0UgXCJFbnVtVmFsIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIgL1JFQlVJTEQiKTsKKworCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgeworCQkjIHJ1biBtYWtlY29udiBub3cKKwkJY2hkaXIgKCIkSUNVUk9PVC9kYXRhIik7CisJCW9wZW5kaXIgKFRISVNESVIsICIkSUNVUk9PVC9kYXRhIik7CisJCUBhbGxmaWxlcyA9IGdyZXAoIS9eXC5cLj8kLywgcmVhZGRpcihUSElTRElSKSk7CisJCUBhbGx1Y21maWxlcyA9IGdyZXAoL1wudWNtLywgQGFsbGZpbGVzKTsKKwkJY2xvc2VkaXIoVEhJU0RJUik7CisJCS1lICIkSUNVUk9PVC9iaW4vUmVsZWFzZS9pY3V1Yy5kbGwiIG9yIGRpZSAiIElDVSBidWlsZCBub3QgY29tcGxldGVkIHNvIGljdXVjXC5kbGwgaXMgbm90IHRoZXJlIjsKKwkJc3lzdGVtICgiY3AgLWZ2ICRJQ1VST09UL2Jpbi8kYnVpbGRtb2RlLyouZGxsICRJQ1VST09UL3NvdXJjZS90b29scy9tYWtlY29udi8kYnVpbGRtb2RlIik7CisJCWZvcmVhY2ggJHVjbWZpbGUgKEBhbGx1Y21maWxlcykgeworCQkgICAgICAgIHN5c3RlbSAoIiRJQ1VST09UL3NvdXJjZS90b29scy9tYWtlY29udi8kYnVpbGRtb2RlL21ha2Vjb252LmV4ZSAkdWNtZmlsZSIpOwogCQl9CisJfQogCiAgICAgICAgICMgRGVjaWRlIHdoZXJlIHlvdSB3YW50IHRoZSBidWlsZCBjb3BpZWQgZnJvbQogICAgICAgICBjaGRpciAoJHRhcmdldGRpcik7Ci0gICAgICAgICRCVUlMRERJUiA9ICRYTUw0Q1JPT1QgLiAiL0J1aWxkL1dpbjMyL1ZDNi8iIC4gJGJ1aWxkbW9kZTsKKyAgICAgICAgJEJVSUxERElSID0gJFhFUkNFU0NST09UIC4gIi9CdWlsZC9XaW4zMi9WQzYvIiAuICRidWlsZG1vZGU7CiAgICAgICAgIHByaW50ICJcbkJ1aWxkIGlzIGJlaW5nIGNvcGllZCBmcm9tIFwnIiAuICRCVUlMRERJUiAuICJcJyI7CiAKICAgICAgICAgIyBQb3B1bGF0ZSB0aGUgaW5jbHVkZSBvdXRwdXQgZGlyZWN0b3J5CiAgICAgICAgIHByaW50ICgiXG5cbkNvcHlpbmcgaGVhZGVycyBmaWxlcyAuLi5cbiIpOwotICAgICAgICAkeGNvcHljb21tYW5kID0gInhjb3B5ICRYTUw0Q1JPT1RcXHNyY1xcKi5ocHAgJHRhcmdldGRpclxcaW5jbHVkZSI7CisgICAgICAgICR4Y29weWNvbW1hbmQgPSAieGNvcHkgJFhFUkNFU0NST09UXFxzcmNcXCouaHBwICR0YXJnZXRkaXJcXGluY2x1ZGUiOwogICAgICAgICAkeGNvcHljb21tYW5kID1+IHMvXC8vXFwvZzsKICAgICAgICAgc3lzdGVtICgiJHhjb3B5Y29tbWFuZCAvUyAvQyAvSSAvUiIpOwotICAgICAgICAkeGNvcHljb21tYW5kID0gInhjb3B5ICRYTUw0Q1JPT1RcXHNyY1xcKi5jICR0YXJnZXRkaXJcXGluY2x1ZGUiOworICAgICAgICAkeGNvcHljb21tYW5kID0gInhjb3B5ICRYRVJDRVNDUk9PVFxcc3JjXFwqLmMgJHRhcmdldGRpclxcaW5jbHVkZSI7CiAgICAgICAgICR4Y29weWNvbW1hbmQgPX4gcy9cLy9cXC9nOwogICAgICAgICBzeXN0ZW0gKCIkeGNvcHljb21tYW5kIC9TIC9DIC9JIC9SIik7CiAKLQkJaWYgKGxlbmd0aCgkSUNVUk9PVCkgPiAwKSB7CisJaWYgKGxlbmd0aCgkSUNVUk9PVCkgPiAwKSB7CiAgICAgICAgIAlzeXN0ZW0oImNwIC1SZnYgJElDVVJPT1QvaW5jbHVkZS8qICR0YXJnZXRkaXIvaW5jbHVkZS9pY3UiKTsKLQkJfQorCX0KIAogICAgICAgICAjIFBvcHVsYXRlIHRoZSBiaW5hcnkgb3V0cHV0IGRpcmVjdG9yeQogICAgICAgICBwcmludCAoIlxuXG5Db3B5aW5nIGJpbmFyeSBvdXRwdXRzIC4uLlxuIik7CiAgICAgICAgIHN5c3RlbSgiY3AgLWZ2ICRCVUlMRERJUi8qLmRsbCAkdGFyZ2V0ZGlyL2JpbiIpOwogICAgICAgICBzeXN0ZW0oImNwIC1mdiAkQlVJTERESVIvKi5leGUgJHRhcmdldGRpci9iaW4iKTsKLQkJaWYgKGxlbmd0aCgkSUNVUk9PVCkgPiAwKSB7Ci0JCQlzeXN0ZW0oImNwIC1mdiAkSUNVUk9PVC9iaW4vJGJ1aWxkbW9kZS9pY3V1Yy5kbGwgJHRhcmdldGRpci9iaW4iKTsKLQkJCXN5c3RlbSgiY3AgLWZ2ICRJQ1VST09UL2xpYi8kYnVpbGRtb2RlL2ljdXVjLmxpYiAkdGFyZ2V0ZGlyL2xpYiIpOwotCQkJc3lzdGVtKCJjcCAtZnYgJElDVVJPT1Qvc291cmNlL3Rvb2xzL21ha2Vjb252LyRidWlsZG1vZGUvbWFrZWNvbnYuZXhlICR0YXJnZXRkaXIvYmluIik7Ci0JCX0KLSAgICAgICAgc3lzdGVtKCJjcCAtZnYgJEJVSUxERElSL0lYWE1MNEMzLmxpYiAkdGFyZ2V0ZGlyL2xpYiIpOworCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgeworCQlzeXN0ZW0oImNwIC1mdiAkSUNVUk9PVC9iaW4vJGJ1aWxkbW9kZS9pY3V1Yy5kbGwgJHRhcmdldGRpci9iaW4iKTsKKwkJc3lzdGVtKCJjcCAtZnYgJElDVVJPT1QvbGliLyRidWlsZG1vZGUvaWN1dWMubGliICR0YXJnZXRkaXIvbGliIik7CisJCXN5c3RlbSgiY3AgLWZ2ICRJQ1VST09UL3NvdXJjZS90b29scy9tYWtlY29udi8kYnVpbGRtb2RlL21ha2Vjb252LmV4ZSAkdGFyZ2V0ZGlyL2JpbiIpOworCX0KKyAgICAgICAgc3lzdGVtKCJjcCAtZnYgJEJVSUxERElSL3hlcmNlcy1jXzEubGliICR0YXJnZXRkaXIvbGliIik7CiAKICAgICAgICAgIyBDb3B5IHRoZSBsb2NhbGUgZmlsZXMKLQkJaWYgKGxlbmd0aCgkSUNVUk9PVCkgPiAwKSB7Ci0JCQlzeXN0ZW0oImNwIC1mdiAkSUNVUk9PVC9kYXRhLyouY252ICR0YXJnZXRkaXIvYmluL2ljdS9kYXRhLyIpOwotCQkJc3lzdGVtKCJjcCAtZnYgJElDVVJPT1QvZGF0YS9jb252cnRycy50eHQgJHRhcmdldGRpci9iaW4vaWN1L2RhdGEvIik7Ci0JCX0KKwlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKKwkJc3lzdGVtKCJjcCAtZnYgJElDVVJPT1QvZGF0YS8qLmNudiAkdGFyZ2V0ZGlyL2Jpbi9pY3UvZGF0YS8iKTsKKwkJc3lzdGVtKCJjcCAtZnYgJElDVVJPT1QvZGF0YS9jb252cnRycy50eHQgJHRhcmdldGRpci9iaW4vaWN1L2RhdGEvIik7CisJfQogCiAgICAgICAgICMgUG9wdWxhdGUgdGhlIHNhbXBsZXMgZGlyZWN0b3J5CiAgICAgICAgIHByaW50ICgiXG5cbkNvcHlpbmcgc2FtcGxlIGZpbGVzIC4uLlxuIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWE1MNENST09UL3NhbXBsZXMvUHJvamVjdHMvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUHJvamVjdHMiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYTUw0Q1JPT1Qvc2FtcGxlcy9TQVhDb3VudC8qICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhDb3VudCIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9zYW1wbGVzL1NBWFByaW50LyogJHRhcmdldGRpci9zYW1wbGVzL1NBWFByaW50Iik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWE1MNENST09UL3NhbXBsZXMvRE9NQ291bnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvRE9NQ291bnQiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYTUw0Q1JPT1Qvc2FtcGxlcy9ET01QcmludC8qICR0YXJnZXRkaXIvc2FtcGxlcy9ET01QcmludCIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9zYW1wbGVzL1JlZGlyZWN0LyogJHRhcmdldGRpci9zYW1wbGVzL1JlZGlyZWN0Iik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWE1MNENST09UL3NhbXBsZXMvTWVtUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvTWVtUGFyc2UiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYTUw0Q1JPT1Qvc2FtcGxlcy9QUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUFBhcnNlIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWE1MNENST09UL3NhbXBsZXMvU3RkSW5QYXJzZS8qICR0YXJnZXRkaXIvc2FtcGxlcy9TdGRJblBhcnNlIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWE1MNENST09UL3NhbXBsZXMvZGF0YS8qICR0YXJnZXRkaXIvc2FtcGxlcy9kYXRhIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9Qcm9qZWN0cy8qICR0YXJnZXRkaXIvc2FtcGxlcy9Qcm9qZWN0cyIpOworCisgICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9TQVhDb3VudC8qICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhDb3VudCIpOworICAgICAgICBzeXN0ZW0oInJtIC1mICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhDb3VudC9NYWtlZmlsZSIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL3NhbXBsZXMvU0FYUHJpbnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU0FYUHJpbnQiKTsKKyAgICAgICAgc3lzdGVtKCJybSAtZiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU0FYUHJpbnQvTWFrZWZpbGUiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9zYW1wbGVzL0RPTUNvdW50LyogJHRhcmdldGRpci9zYW1wbGVzL0RPTUNvdW50Iik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL0RPTUNvdW50L01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9ET01QcmludC8qICR0YXJnZXRkaXIvc2FtcGxlcy9ET01QcmludCIpOworICAgICAgICBzeXN0ZW0oInJtIC1mICR0YXJnZXRkaXIvc2FtcGxlcy9ET01QcmludC9NYWtlZmlsZSIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL3NhbXBsZXMvUmVkaXJlY3QvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUmVkaXJlY3QiKTsKKyAgICAgICAgc3lzdGVtKCJybSAtZiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUmVkaXJlY3QvTWFrZWZpbGUiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9zYW1wbGVzL01lbVBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL01lbVBhcnNlIik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL01lbVBhcnNlL01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9QUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUFBhcnNlIik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL1BQYXJzZS9NYWtlZmlsZSIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL3NhbXBsZXMvU3RkSW5QYXJzZS8qICR0YXJnZXRkaXIvc2FtcGxlcy9TdGRJblBhcnNlIik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL1N0ZEluUGFyc2UvTWFrZWZpbGUiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9zYW1wbGVzL0VudW1WYWwvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvRW51bVZhbCIpOworICAgICAgICBzeXN0ZW0oInJtIC1mICR0YXJnZXRkaXIvc2FtcGxlcy9FbnVtVmFsL01ha2VmaWxlIik7CisKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9zYW1wbGVzL2RhdGEvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvZGF0YSIpOwogCiAgICAgICAgICMgUG9wdWxhdGUgdGhlIGRvY3MgZGlyZWN0b3J5CiAgICAgICAgIHByaW50ICgiXG5cbkNvcHlpbmcgZG9jdW1lbnRhdGlvbiAuLi5cbiIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9kb2MvKiAkdGFyZ2V0ZGlyL2RvYyIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9kb2MvYXBpRG9jcy8qICR0YXJnZXRkaXIvZG9jL2FwaURvY3MiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAkWE1MNENST09UL1JlYWRtZS5odG1sICR0YXJnZXRkaXIiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAkWE1MNENST09UL2RvYy9saWNlbnNlLmh0bWwgJHRhcmdldGRpciIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL2RvYy8qICR0YXJnZXRkaXIvZG9jIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWEVSQ0VTQ1JPT1QvZG9jL2FwaURvY3MvKiAkdGFyZ2V0ZGlyL2RvYy9hcGlEb2NzIik7CisgICAgICAgIHN5c3RlbSgiY3AgJFhFUkNFU0NST09UL1JlYWRtZS5odG1sICR0YXJnZXRkaXIiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAkWEVSQ0VTQ1JPT1QvY3JlZGl0cy50eHQgJHRhcmdldGRpciIpOwkKKyAgICAgICAgc3lzdGVtKCJjcCAkWEVSQ0VTQ1JPT1QvTElDRU5TRSAkdGFyZ2V0ZGlyIik7CisgICAgICAgIHN5c3RlbSgiY3AgJFhFUkNFU0NST09UL2RvYy9saWNlbnNlLmh0bWwgJHRhcmdldGRpciIpOworICAgICAgICBzeXN0ZW0oImNwICRYRVJDRVNDUk9PVC9MSUNFTlNFLnR4dCAkdGFyZ2V0ZGlyIik7CisgICAgICAgIHN5c3RlbSgiY3AgJFhFUkNFU0NST09UL2xpY2Vuc2UuaHRtbCAkdGFyZ2V0ZGlyIik7CisgICAgICAgIHN5c3RlbSgiY3AgJFhFUkNFU0NST09UL2xpY2Vuc2UtSUJNLXB1YmxpYy1zb3VyY2UuaHRtbCAkdGFyZ2V0ZGlyIik7CiAKICAgICAgICAgIyBOb3cgcGFja2FnZSBpdCBhbGwgdXAgdXNpbmcgWklQCiAgICAgICAgIGNoZGlyICgiJHRhcmdldGRpci8uLiIpOwpAQCAtMjgxLDE1ICszNDAsMjUgQEAKICAgICAgICAgICAgJGljdUNvbXBpbGVGbGFncyA9ICdDWFg9InhsQ19yIC1ML3Vzci9scHAveGxDL2xpYiIgQ0M9InhsY19yIC1ML3Vzci9scHAveGxDL2xpYiIgQ19GTEFHUz0iLXcgLU8iIENYWF9GTEFHUz0iLXcgLU8iJzsgCiAgICAgICAgIH0KICAgICAgICAgaWYgKCRwbGF0Zm9ybSBlcSAnSFAtVVgnKSB7Ci0gICAgICAgICAgICBpZiAoJGNjb21waWxlciBlcSAnQ0MnKSB7CisgICAgICAgICAgICBpZiAoJG9wdF94IGVxICdDQycpIHsKICAgICAgICAgICAgICAgICAkaWN1Q29tcGlsZUZsYWdzID0gJ0NDPWNjIENYWD1DQyBDWFhGTEFHUz0iK2VoICtEQXBvcnRhYmxlIC13IC1PIiBDRkxBR1M9IitEQXBvcnRhYmxlIC13IC1PIic7IAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgJGljdUNvbXBpbGVGbGFncyA9ICdDQz1jYyBDWFg9YUNDIENYWEZMQUdTPSIrREFwb3J0YWJsZSAtdyAtTyIgQ0ZMQUdTPSIrREFwb3J0YWJsZSAtdyAtTyInOyAKICAgICAgICAgICAgIH0KKwkgICAgIyBGaW5kIG91dCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9uIGZyb20gJ3VuYW1lIC1yJworCSAgICBvcGVuKE9TVkVSU0lPTiwgInVuYW1lIC1yfCIpOworCSAgICAkb3N2ZXJzaW9uID0gPE9TVkVSU0lPTj47CisJICAgIGNob21wKCRvc3ZlcnNpb24pOworCSAgICBjbG9zZSAoT1NWRVJTSU9OKTsKKwkgICAgJHBsYXRmb3JtID0gJ2hwLTExJyBpZiAoJG9zdmVyc2lvbiA9fiBtLzExXC4vKTsKKwkgICAgJHBsYXRmb3JtID0gJ2hwLTEwJyBpZiAoJG9zdmVyc2lvbiA9fiBtLzEwXC4vKTsKKwkgICAgJG9wdF9yID0gJ2RjZScgaWYgKCRvcHRfciBlcSAnJyk7ICAjIEJ5IGRlZmF1bHQsIHVzZSBkY2UgdGhyZWFkcyBpZiBub3Qgc3BlY2lmaWVkCisKICAgICAgICAgfQogICAgICAgICBpZiAoJHBsYXRmb3JtID1+IG0vTGludXgvKSB7CiAgICAgICAgICAgICRpY3VDb21waWxlRmxhZ3MgPSAnQ0M9Z2NjIENYWD1nKysgQ1hYRkxBR1M9Ii13IC1PIiBDRkxBR1M9Ii13IC1PIic7IAorCSAgICRwbGF0Zm9ybSA9fiB0ci9BLVovYS16LzsKICAgICAgICAgfQogICAgICAgICBpZiAoJHBsYXRmb3JtID1+IG0vU3VuT1MvKSB7CiAgICAgICAgICAgICRpY3VDb21waWxlRmxhZ3MgPSAnQ0M9Y2MgQ1hYPUNDIENYWEZMQUdTPSItdyAtTyIgQ0ZMQUdTPSItdyAtTyInOyAKQEAgLTMwMiwzMiArMzcxLDUyIEBACiAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQogCi0gICAgICAgICRzcmN6aXBmaWxlcyA9ICRzcmN0YXJnZXRkaXIgLiAiLyoiOwotCi0gICAgICAgICRzcmN0YXJnZXRkaXIgPSAkT1VUUFVURElSIC4gJHNyY3RhcmdldGRpcjsKICAgICAgICAgaWYgKC1lICRzcmN0YXJnZXRkaXIuIi50YXIiKSB7CiAgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvcjogVGhlIHRhcmdldCBmaWxlIFwnJHNyY3RhcmdldGRpci50YXJcJyBhbHJlYWR5IGV4aXN0cy5cbiIpOwogICAgICAgICAgICAgICAgIHByaW50ICgiICAgICAgIFlvdSBtdXN0IGRlbGV0ZSB0aGUgZmlsZSBcJyRzcmN0YXJnZXRkaXIudGFyXCcgdG8gcGFja2FnZSB5b3VyIHByb2R1Y3QuXG4iKTsKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CiAKKyAgICAgICAgJHBsYXRmb3JtID1+IHRyL0EtWi9hLXovOwogCiAgICAgICAgICMgTWFrZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgaXRzIG1haW4gc3ViZGlyZWN0b3JpZXMKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpciIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2JpbiIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2xpYiIpOwotCQlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKLSAgICAgICAgCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvbGliL2ljdSIpOwotICAgICAgICAJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9saWIvaWN1L2RhdGEiKTsKLSAgICAgICAgCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS9pY3UiKTsKLQkJfQogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUiKTsKKwlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKKwkJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9saWIvaWN1Iik7CisJCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvbGliL2ljdS9kYXRhIik7CisJCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS9pY3UiKTsKKwl9CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS9zYXgiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL2ZyYW1ld29yayIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvaW50ZXJuYWwiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3BhcnNlcnMiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Db21waWxlcnMiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvTXNnTG9hZGVycy9JQ1UiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL0luTWVtb3J5Iik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvTXNnTG9hZGVycy9Nc2dDYXRhbG9nIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvTXNnTG9hZGVycy9XaW4zMiIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3JtcyIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9BSVgiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvSFBVWCIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9MaW51eCIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9NYWNPUyIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9PUzIiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvT1MzOTAiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcyIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9UYW5kZW0iKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvV2luMzIiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9UcmFuc2NvZGVycyIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1RyYW5zY29kZXJzL0lDVSIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1RyYW5zY29kZXJzL0ljb252Iik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvVHJhbnNjb2RlcnMvV2luMzIiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL2RvbSIpOworICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdmFsaWRhdG9ycyIpOworICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdmFsaWRhdG9ycy9EVEQiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9zYW1wbGVzIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvc2FtcGxlcy9kYXRhIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhDb3VudCIpOwpAQCAtMzM4LDk3ICs0MjcsMTU2IEBACiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvc2FtcGxlcy9NZW1QYXJzZSIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL3NhbXBsZXMvUFBhcnNlIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvc2FtcGxlcy9TdGRJblBhcnNlIik7CisgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvc2FtcGxlcy9FbnVtVmFsIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvZG9jIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvZG9jL2FwaURvY3MiKTsKIAotCQlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKLQkJCSMgRmlyc3QgbWFrZSB0aGUgSUNVIGZpbGVzCi0JCQljaGRpciAoIiRJQ1VST09UL3NvdXJjZSIpOwotCQkJc3lzdGVtICgiJGljdUNvbXBpbGVGbGFncyBjb25maWd1cmUgLS1wcmVmaXg9JElDVVJPT1QiKTsKLQkJCWNoZGlyICgiJElDVVJPT1Qvc291cmNlL2NvbW1vbiIpOwotCQkJc3lzdGVtICgiZ21ha2UiKTsKLQkJCXN5c3RlbSAoImdtYWtlIGluc3RhbGwiKTsKKwlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKKwkJIyBGaXJzdCBtYWtlIHRoZSBJQ1UgZmlsZXMKKwkJY2hkaXIgKCIkSUNVUk9PVC9zb3VyY2UiKTsKKwkJc3lzdGVtICgiY2htb2QgNzc3IGNvbmZpZ3VyZSIpOworCQlzeXN0ZW0gKCJjaG1vZCA3NzcgaW5zdGFsbC1zaCIpOworCQlwcmludCAoIiRpY3VDb21waWxlRmxhZ3MgY29uZmlndXJlIC0tcHJlZml4PSRJQ1VST09UXG4iKTsKKwkJc3lzdGVtICgiJGljdUNvbXBpbGVGbGFncyBjb25maWd1cmUgLS1wcmVmaXg9JElDVVJPT1QiKTsKKwkJY2hkaXIgKCIkSUNVUk9PVC9zb3VyY2UvY29tbW9uIik7CisJCXN5c3RlbSAoImdtYWtlIGNsZWFuIik7CSMgQ2xlYW4gdXAgdGhlIGJ1aWxkLCBtYXkgd2FudCB0byBjb21tZW50IHRoaXMgbGluZSBvdXQhCisJCXN5c3RlbSAoImdtYWtlIik7CisJCXN5c3RlbSAoImdtYWtlIGluc3RhbGwiKTsKIAotCQkJY2hkaXIgKCIkSUNVUk9PVC9zb3VyY2UvdG9vbHMvbWFrZWNvbnYiKTsKKwkJY2hkaXIgKCIkSUNVUk9PVC9zb3VyY2UvdG9vbHMvbWFrZWNvbnYiKTsKKwkJc3lzdGVtICgiZ21ha2UgY2xlYW4iKTsJIyBDbGVhbiB1cCB0aGUgYnVpbGQsIG1heSB3YW50IHRvIGNvbW1lbnQgdGhpcyBsaW5lIG91dCEKKwkJc3lzdGVtICgicm0gLXJmICRJQ1VST09UL2RhdGEvKi5jbnYiKTsJIyBUaGlzIGxpbmUgd2lsbCBzYXZlIHlvdSBtYW55IHRlYXJzLCBidXQgY29tbWVudCBpdCBpZiB5b3Ugd2FudAorCQlzeXN0ZW0gKCJnbWFrZSIpOworCQkjIEZvciB0aGUgYW50aXF1YXRlZCBDQyBjb21waWxlciB1bmRlciBIUFVYLCB3ZSBuZWVkIHRvIGludm9rZQorCQkjIGdtYWtlIG9uZSBleHRyYSB0aW1lIHRvIGdlbmVyYXRlIHRoZSAuY252IGZpbGVzLgorCQlpZiAoICgkcGxhdGZvcm0gPX4gbS9ocC0vaSkgJiYgKCRvcHRfeCBlcSAnQ0MnKSApIHsKIAkJCXN5c3RlbSAoImdtYWtlIik7Ci0JCQkjIEZvciB0aGUgYW50aXF1YXRlZCBDQyBjb21waWxlciB1bmRlciBIUFVYLCB3ZSBuZWVkIHRvIGludm9rZQotCQkJIyBnbWFrZSBvbmUgZXh0cmEgdGltZSB0byBnZW5lcmF0ZSB0aGUgLmNudiBmaWxlcy4KLQkJCWlmICggKCRwbGF0Zm9ybSBlcSAnSFAtVVgnKSAmJiAoJGNvbXBpbGVyIGVxICdDQycpICkgewotCQkJCXN5c3RlbSAoImdtYWtlIik7Ci0JCQl9CiAJCX0KKwl9CiAKICAgICAgICAgIyBtYWtlIHRoZSBzb3VyY2UgZmlsZXMKLSAgICAgICAgY2hkaXIgKCIkWE1MNENST09UL3NyYyIpOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9zcmMiKTsKKworCWlmICggJHBsYXRmb3JtID1+IG0vc3Vub3MvaSApIHsgJHBsYXRmb3JtID0gInNvbGFyaXMiOyB9CisJaWYgKCAkcGxhdGZvcm0gPX4gbS9BSVgvICkgeyAkcGxhdGZvcm0gPSAiYWl4IjsgfQogCiAgICAgICAgIHN5c3RlbSAoInJ1bkNvbmZpZ3VyZSAtcCRwbGF0Zm9ybSAtYyRvcHRfYyAteCRvcHRfeCAtbSRvcHRfbSAtbiRvcHRfbiAtdCRvcHRfdCAtciRvcHRfciIpOworICAgICAgICBzeXN0ZW0gKCJnbWFrZSBjbGVhbiIpOwkjIE1heSB3YW50IHRvIGNvbW1lbnQgdGhpcyBsaW5lIG91dCB0byBzcGVlZCB1cAogICAgICAgICBzeXN0ZW0gKCJnbWFrZSIpOwogCiAgICAgICAgICMgTm93IGJ1aWxkIHRoZSBzYW1wbGVzCi0gICAgICAgIGNoZGlyICgiJFhNTDRDUk9PVC9zYW1wbGVzIik7CisgICAgICAgIGNoZGlyICgiJFhFUkNFU0NST09UL3NhbXBsZXMiKTsKICAgICAgICAgc3lzdGVtICgicnVuQ29uZmlndXJlIC1wJHBsYXRmb3JtIC1jJG9wdF9jIC14JG9wdF94Iik7CisgICAgICAgIHN5c3RlbSAoImdtYWtlIGNsZWFuIik7CSMgTWF5IHdhbnQgdG8gY29tbWVudCB0aGlzIGxpbmUgb3V0IHRvIHNwZWVkIHVwCiAgICAgICAgIHN5c3RlbSAoImdtYWtlIik7CiAKICAgICAgICAgY2hkaXIgKCR0YXJnZXRkaXIpOwogCiAgICAgICAgICMgUG9wdWxhdGUgdGhlIGluY2x1ZGUgb3V0cHV0IGRpcmVjdG9yeQogICAgICAgICBwcmludCAoIlxuXG5Db3B5aW5nIGhlYWRlcnMgZmlsZXMgLi4uXG4iKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvc2F4LyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS9zYXgiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvZnJhbWV3b3JrLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS9mcmFtZXdvcmsiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvZG9tL0RPTSouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS9kb20iKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvaW50ZXJuYWwvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL2ludGVybmFsIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc3JjL2ludGVybmFsLyouYyAkdGFyZ2V0ZGlyL2luY2x1ZGUvaW50ZXJuYWwiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvcGFyc2Vycy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvcGFyc2VycyIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NyYy91dGlsLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc3JjL3V0aWwvKi5jICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvc2F4LyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS9zYXgiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy9mcmFtZXdvcmsvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL2ZyYW1ld29yayIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL2RvbS9ET00qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvZG9tIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvaW50ZXJuYWwvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL2ludGVybmFsIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvaW50ZXJuYWwvKi5jICR0YXJnZXRkaXIvaW5jbHVkZS9pbnRlcm5hbCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3BhcnNlcnMvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL3BhcnNlcnMiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC8qLmMgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvQ29tcGlsZXJzLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL0NvbXBpbGVycyIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9Nc2dMb2FkZXJzLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL01zZ0xvYWRlcnMiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvTXNnTG9hZGVycy9JQ1UvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvTXNnTG9hZGVycy9JQ1UiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL0luTWVtb3J5Iik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL01zZ0NhdGFsb2ciKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvTXNnTG9hZGVycy9XaW4zMi8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL1dpbjMyIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1BsYXRmb3Jtcy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvUGxhdGZvcm1zL0FJWC8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvQUlYIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1BsYXRmb3Jtcy9IUFVYLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9IUFVYIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1BsYXRmb3Jtcy9MaW51eC8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvTGludXgiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvUGxhdGZvcm1zL01hY09TLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9NYWNPUyIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9QbGF0Zm9ybXMvT1MyLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9PUzIiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvUGxhdGZvcm1zL09TMzkwLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9PUzM5MCIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcyIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9QbGF0Zm9ybXMvVGFuZGVtLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9UYW5kZW0iKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvUGxhdGZvcm1zL1dpbjMyLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9XaW4zMiIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9UcmFuc2NvZGVycy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9UcmFuc2NvZGVycyIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9UcmFuc2NvZGVycy9JQ1UvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvVHJhbnNjb2RlcnMvSUNVIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1RyYW5zY29kZXJzL0ljb252LyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1RyYW5zY29kZXJzL0ljb252Iik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1RyYW5zY29kZXJzL1dpbjMyLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1RyYW5zY29kZXJzL1dpbjMyIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy92YWxpZGF0b3JzL0RURC8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdmFsaWRhdG9ycy9EVEQiKTsKIAkJCi0JCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgewotCQkJcHJpbnQgIlxuSW50ZXJuYXRpb25hbCBmaWxlcyBhcmUgYmVpbmcgY29waWVkIGZyb20gXCciIC4gJElDVVJPT1QgLiAiXCciOwotCQkJc3lzdGVtKCJjcCAtUmYgJElDVVJPT1QvaW5jbHVkZS8qICR0YXJnZXRkaXIvaW5jbHVkZS9pY3UiKTsKLQkJfQorCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgeworCQlwcmludCAiXG5JQ1UgZmlsZXMgYXJlIGJlaW5nIGNvcGllZCBmcm9tIFwnIiAuICRJQ1VST09UIC4gIlwnIjsKKwkJc3lzdGVtKCJjcCAtUmYgJElDVVJPT1QvaW5jbHVkZS8qICR0YXJnZXRkaXIvaW5jbHVkZS9pY3UiKTsKKwl9CiAKICAgICAgICAgIyBQb3B1bGF0ZSB0aGUgYmluYXJ5IG91dHB1dCBkaXJlY3RvcnkKICAgICAgICAgcHJpbnQgKCJcblxuQ29weWluZyBiaW5hcnkgb3V0cHV0cyAuLi5cbiIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL2Jpbi8qICR0YXJnZXRkaXIvYmluIik7Ci0JCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgewotCQkJc3lzdGVtKCJjcCAtZiAkSUNVUk9PVC9zb3VyY2UvdG9vbHMvbWFrZWNvbnYvbWFrZWNvbnYgJHRhcmdldGRpci9iaW4iKTsKLQkJCXN5c3RlbSgiY3AgLWYgJElDVVJPT1QvbGliL2xpYmljdS11Yy4qICR0YXJnZXRkaXIvbGliIik7Ci0JCX0KLSAgICAgICAgc3lzdGVtKCJjcCAtZiAkWE1MNENST09UL2xpYi8qLmEgJHRhcmdldGRpci9saWIiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtZiAkWE1MNENST09UL2xpYi8qLnNvICR0YXJnZXRkaXIvbGliIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLWYgJFhNTDRDUk9PVC9saWIvKi5zbCAkdGFyZ2V0ZGlyL2xpYiIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1QvYmluLyogJHRhcmdldGRpci9iaW4iKTsKKwlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKKwkJc3lzdGVtKCJjcCAtZiAkSUNVUk9PVC9zb3VyY2UvdG9vbHMvbWFrZWNvbnYvbWFrZWNvbnYgJHRhcmdldGRpci9iaW4iKTsKKwkJc3lzdGVtKCJjcCAtZiAkSUNVUk9PVC9saWIvbGliaWN1LXVjLiogJHRhcmdldGRpci9saWIiKTsKKwl9CisgICAgICAgIHN5c3RlbSgiY3AgLWYgJFhFUkNFU0NST09UL2xpYi8qLmEgJHRhcmdldGRpci9saWIiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtZiAkWEVSQ0VTQ1JPT1QvbGliLyouc28gJHRhcmdldGRpci9saWIiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtZiAkWEVSQ0VTQ1JPT1QvbGliLyouc2wgJHRhcmdldGRpci9saWIiKTsKIAogICAgICAgICBzeXN0ZW0oInJtIC1yZiAkdGFyZ2V0ZGlyL2Jpbi9vYmoiKTsKIAotCQlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKLQkJCSMgQ29weSB0aGUgbG9jYWxlIGZpbGVzCi0JCQlzeXN0ZW0oImNwIC1mICRJQ1VST09UL2RhdGEvKi5jbnYgJHRhcmdldGRpci9saWIvaWN1L2RhdGEvIik7Ci0JCQlzeXN0ZW0oImNwIC1mICRJQ1VST09UL2RhdGEvY29udnJ0cnMudHh0ICR0YXJnZXRkaXIvbGliL2ljdS9kYXRhLyIpOwotCQl9CisJaWYgKGxlbmd0aCgkSUNVUk9PVCkgPiAwKSB7CisJCSMgQ29weSB0aGUgbG9jYWxlIGZpbGVzCisJCXN5c3RlbSgiY3AgLWYgJElDVVJPT1QvZGF0YS8qLmNudiAkdGFyZ2V0ZGlyL2xpYi9pY3UvZGF0YS8iKTsKKwkJc3lzdGVtKCJjcCAtZiAkSUNVUk9PVC9kYXRhL2NvbnZydHJzLnR4dCAkdGFyZ2V0ZGlyL2xpYi9pY3UvZGF0YS8iKTsKKwl9CiAKICAgICAgICAgIyBQb3B1bGF0ZSB0aGUgc2FtcGxlcyBkaXJlY3RvcnkKICAgICAgICAgcHJpbnQgKCJcblxuQ29weWluZyBzYW1wbGUgZmlsZXMgLi4uXG4iKTsKICAgICAgICAgZm9yZWFjaCAkaWlpICgnY29uZmlnLmd1ZXNzJywgJ2NvbmZpZy5oLmluJywgJ2NvbmZpZy5zdWInLCAnY29uZmlndXJlJywgJ2NvbmZpZ3VyZS5pbicsCiAgICAgICAgICAgICAgICAgJ2luc3RhbGwtc2gnLCAncnVuQ29uZmlndXJlJywgJ01ha2VmaWxlLmluJywgJ01ha2VmaWxlLmluY2wnLCAnTWFrZWZpbGUnKSB7Ci0gICAgICAgICAgICAgICAgc3lzdGVtKCJjcCAtZiAkWE1MNENST09UL3NhbXBsZXMvJGlpaSAkdGFyZ2V0ZGlyL3NhbXBsZXMiKTsKKyAgICAgICAgICAgICAgICBzeXN0ZW0oImNwIC1mICRYRVJDRVNDUk9PVC9zYW1wbGVzLyRpaWkgJHRhcmdldGRpci9zYW1wbGVzIik7CiAgICAgICAgIH0KIAotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NhbXBsZXMvZGF0YS8qICR0YXJnZXRkaXIvc2FtcGxlcy9kYXRhIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc2FtcGxlcy9TQVhDb3VudC8qICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhDb3VudCIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NhbXBsZXMvU0FYUHJpbnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU0FYUHJpbnQiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zYW1wbGVzL0RPTUNvdW50LyogJHRhcmdldGRpci9zYW1wbGVzL0RPTUNvdW50Iik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc2FtcGxlcy9ET01QcmludC8qICR0YXJnZXRkaXIvc2FtcGxlcy9ET01QcmludCIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NhbXBsZXMvUmVkaXJlY3QvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUmVkaXJlY3QiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zYW1wbGVzL01lbVBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL01lbVBhcnNlIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc2FtcGxlcy9QUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUFBhcnNlIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc2FtcGxlcy9TdGRJblBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL1N0ZEluUGFyc2UiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NhbXBsZXMvZGF0YS8qICR0YXJnZXRkaXIvc2FtcGxlcy9kYXRhIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL1NBWENvdW50LyogJHRhcmdldGRpci9zYW1wbGVzL1NBWENvdW50Iik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL1NBWENvdW50L01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL1NBWFByaW50LyogJHRhcmdldGRpci9zYW1wbGVzL1NBWFByaW50Iik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL1NBWFByaW50L01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL0RPTUNvdW50LyogJHRhcmdldGRpci9zYW1wbGVzL0RPTUNvdW50Iik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL0RPTUNvdW50L01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL0RPTVByaW50LyogJHRhcmdldGRpci9zYW1wbGVzL0RPTVByaW50Iik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL0RPTVByaW50L01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL1JlZGlyZWN0LyogJHRhcmdldGRpci9zYW1wbGVzL1JlZGlyZWN0Iik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL1JlZGlyZWN0L01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL01lbVBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL01lbVBhcnNlIik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL01lbVBhcnNlL01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL1BQYXJzZS8qICR0YXJnZXRkaXIvc2FtcGxlcy9QUGFyc2UiKTsKKyAgICAgICAgc3lzdGVtKCJybSAtZiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUFBhcnNlL01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL1N0ZEluUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU3RkSW5QYXJzZSIpOworICAgICAgICBzeXN0ZW0oInJtIC1mICR0YXJnZXRkaXIvc2FtcGxlcy9TdGRJblBhcnNlL01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL0VudW1WYWwvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvRW51bVZhbCIpOworICAgICAgICBzeXN0ZW0oInJtIC1mICR0YXJnZXRkaXIvc2FtcGxlcy9FbnVtVmFsL01ha2VmaWxlIik7CisgICAgICAgIHN5c3RlbSgicm0gLWYgJHRhcmdldGRpci9zYW1wbGVzL01ha2VmaWxlIik7CisjICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9TQVhDb3VudC8qICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhDb3VudCIpOworIyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NhbXBsZXMvU0FYUHJpbnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU0FYUHJpbnQiKTsKKyMgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL0RPTUNvdW50LyogJHRhcmdldGRpci9zYW1wbGVzL0RPTUNvdW50Iik7CisjICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9ET01QcmludC8qICR0YXJnZXRkaXIvc2FtcGxlcy9ET01QcmludCIpOworIyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NhbXBsZXMvUmVkaXJlY3QvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUmVkaXJlY3QiKTsKKyMgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL01lbVBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL01lbVBhcnNlIik7CisjICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9QUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUFBhcnNlIik7CisjICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9TdGRJblBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL1N0ZEluUGFyc2UiKTsKKyMgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL0VudW1WYWwvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvRW51bVZhbCIpOwogCiAgICAgICAgICMgUG9wdWxhdGUgdGhlIGRvY3MgZGlyZWN0b3J5CiAgICAgICAgIHByaW50ICgiXG5cbkNvcHlpbmcgZG9jdW1lbnRhdGlvbiAuLi5cbiIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL2RvYy8qICR0YXJnZXRkaXIvZG9jIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1QvZG9jL2FwaURvY3MvKiAkdGFyZ2V0ZGlyL2RvYy9hcGlEb2NzIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgJFhNTDRDUk9PVC9SZWFkbWUuaHRtbCAkdGFyZ2V0ZGlyIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgJFhNTDRDUk9PVC9kb2MvbGljZW5zZS5odG1sICR0YXJnZXRkaXIiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL2RvYy8qICR0YXJnZXRkaXIvZG9jIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9kb2MvYXBpRG9jcy8qICR0YXJnZXRkaXIvZG9jL2FwaURvY3MiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAkWEVSQ0VTQ1JPT1QvUmVhZG1lLmh0bWwgJHRhcmdldGRpciIpOworICAgICAgICBzeXN0ZW0oImNwICRYRVJDRVNDUk9PVC9jcmVkaXRzLnR4dCAkdGFyZ2V0ZGlyIik7CQorICAgICAgICBzeXN0ZW0oImNwICRYRVJDRVNDUk9PVC9MSUNFTlNFICR0YXJnZXRkaXIiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAkWEVSQ0VTQ1JPT1QvTElDRU5TRS50eHQgJHRhcmdldGRpciIpOworICAgICAgICBzeXN0ZW0oImNwICRYRVJDRVNDUk9PVC9saWNlbnNlLmh0bWwgJHRhcmdldGRpciIpOworICAgICAgICBzeXN0ZW0oImNwICRYRVJDRVNDUk9PVC9saWNlbnNlLUlCTS1wdWJsaWMtc291cmNlLmh0bWwgJHRhcmdldGRpciIpOworCisgICAgICAgIHN5c3RlbSgiY3AgJFhFUkNFU0NST09UL2RvYy9saWNlbnNlLmh0bWwgJHRhcmdldGRpciIpOwogCiAgICAgICAgICMgQ2hhbmdlIHRoZSBkaXJlY3RvcnkgcGVybWlzc2lvbnMKICAgICAgICAgc3lzdGVtICgiY2htb2QgNjQ0IGBmaW5kICR0YXJnZXRkaXIgLXR5cGUgZmAiKTsKQEAgLTQ0MiwxNCArNTkwLDEzIEBACiAgICAgICAgIGNoZGlyICgiJHRhcmdldGRpci8uLiIpOwogICAgICAgICAkemlwbmFtZSA9ICR0YXJnZXRkaXIgLiAiLnRhciI7CiAgICAgICAgICRwbGF0Zm9ybXppcG5hbWUgPSAkemlwbmFtZTsKLSAgICAgICAgJHBsYXRmb3JtemlwbmFtZSA9fiBzL1wudGFyLyRwbGF0Zm9ybWV4dGVuc2lvblwudGFyL2c7CiAKLSAgICAgICAgcHJpbnQgKCJ0YXIgLWN2ZiAkcGxhdGZyb216aXBuYW1lICR6aXBmaWxlc1xuIik7CisgICAgICAgIHByaW50ICgidGFyIC1jdmYgJHBsYXRmb3JtemlwbmFtZSAkemlwZmlsZXNcbiIpOwogICAgICAgICBzeXN0ZW0gKCJ0YXIgLWN2ZiAkcGxhdGZvcm16aXBuYW1lICR6aXBmaWxlcyIpOwogCiAgICAgICAgICMgRmluYWxseSBjb21wcmVzcyB0aGUgZmlsZXMKICAgICAgICAgcHJpbnQgKCJDb21wcmVzc2luZyAkcGxhdGZvcm16aXBuYW1lIC4uLlxuIik7Ci0gICAgICAgIHN5c3RlbSAoImNvbXByZXNzICRwbGF0Zm9ybXppcG5hbWUiKTsKKyAgICAgICAgc3lzdGVtICgiZ3ppcCAkcGxhdGZvcm16aXBuYW1lIik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlU291cmNlcy5wbCBiL3NjcmlwdHMvcGFja2FnZVNvdXJjZXMucGwKaW5kZXggNDg2YTQ3YS4uMmMwNzZmNyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wYWNrYWdlU291cmNlcy5wbAorKysgYi9zY3JpcHRzL3BhY2thZ2VTb3VyY2VzLnBsCkBAIC0xLDE3ICsxLDE3IEBACiAjIS91c3IvYmluL3BlcmwKIAotcHVzaChASU5DLCAiL2hvbWUveG1sNGMvYmluIiwgIi9ob21lL3htbDRjL2Jpbi9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiLCAiL0RldmVsb3BtZW50Mi9jdXBlcnQvYmluL3BlcmwvcGVybC1SVU4vb3B0L3Blcmw1L2xpYiIsICIvRGV2ZWxvcG1lbnQvY3VwZXJ0L3Vzci9sb2NhbC9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiKTsKK3B1c2goQElOQywgIi9ob21lL3hlcmNlcy1jL2JpbiIsICIvaG9tZS94ZXJjZXMtYy9iaW4vcGVybC9wZXJsLVJVTi9vcHQvcGVybDUvbGliIiwgIi9EZXZlbG9wbWVudDIvY3VwZXJ0L2Jpbi9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiLCAiL0RldmVsb3BtZW50L2N1cGVydC91c3IvbG9jYWwvcGVybC9wZXJsLVJVTi9vcHQvcGVybDUvbGliIik7CiByZXF1aXJlICJnZXRvcHQucGwiOwogCiAkfD0xOyAgICMgRm9yY2UgYSBmbHVzaCBhZnRlciBldmVyeSBwcmludAogCi0jIFNldCB1cCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBYTUw0QyBhbmQgSUNVCi0kWE1MNENST09UID0gJEVOVnsnWE1MNENST09UJ307CisjIFNldCB1cCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBYRVJDRVMtQyBhbmQgSUNVCiskWEVSQ0VTQ1JPT1QgPSAkRU5WeydYRVJDRVNDUk9PVCd9OwogJElDVVJPT1QgPSAkRU5WeydJQ1VST09UJ307CiAKICMgQ2hlY2sgZm9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGV4aXQgaWYgZXJyb3IKLWlmICghbGVuZ3RoKCRYTUw0Q1JPT1QpKSB7Ci0gICAgICAgIHByaW50ICJZb3UgbXVzdCBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIFhNTDRDUk9PVCB0byB3b3JrIHdpdGggdGhpcyBzY3JpcHQuXG4iOworaWYgKCFsZW5ndGgoJFhFUkNFU0NST09UKSkgeworICAgICAgICBwcmludCAiWW91IG11c3Qgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBYRVJDRVNDUk9PVCB0byB3b3JrIHdpdGggdGhpcyBzY3JpcHQuXG4iOwogICAgICAgICBleGl0KC0xKTsKIH0KIApAQCAtMTksMTAgKzE5LDEwIEBACiAkT1VUUFVURElSID0gJG9wdF9vOwogCiAjIENoZWNrIGZvciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBleGl0IGlmIGVycm9yCi1pZiAoIWxlbmd0aCgkWE1MNENST09UKSB8fCAhbGVuZ3RoKCRPVVRQVVRESVIpKSB7Ci0gICAgICAgIHByaW50ICgiVXNhZ2UgaXM6IHBhY2thZ2VTb3VyY2VzIC1zPG91dHB1dF9kaXJlY3Rvcnk+XG4iKTsKLSAgICAgICAgcHJpbnQgKCJFeGFtcGxlOiBwZXJsIHBhY2thZ2VTb3VyY2VzLnBsIC1vZDpcXHhtbDRjc3JjM18wXzBcbiIpOwotICAgICAgICBwcmludCAoIiAgICAgICAgIHBlcmwgcGFja2FnZVNvdXJjZXMucGwgLW9cJEhPTUUveG1sNGNzcmMzXzBfMCIpOworaWYgKCFsZW5ndGgoJFhFUkNFU0NST09UKSB8fCAhbGVuZ3RoKCRPVVRQVVRESVIpKSB7CisgICAgICAgIHByaW50ICgiVXNhZ2UgaXM6IHBhY2thZ2VTb3VyY2VzIC1vPG91dHB1dF9kaXJlY3Rvcnk+XG4iKTsKKyAgICAgICAgcHJpbnQgKCJFeGFtcGxlOiBwZXJsIHBhY2thZ2VTb3VyY2VzLnBsIC1vZDpcXHhlcmNlcy1jXzFfMF8wZDAxXG4iKTsKKyAgICAgICAgcHJpbnQgKCIgICAgICAgICBwZXJsIHBhY2thZ2VTb3VyY2VzLnBsIC1vXCRIT01FL3hlcmNlcy1jXzFfMF8wZDAxXG4iKTsKICAgICAgICAgZXhpdCgtMSk7CiB9CiAKQEAgLTM0LDExICszNCwxMSBAQAogIyB9CiAKICNGaXggdGhlIGJhY2tzbGFzaGVzIG9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtCi0kWE1MNENST09UID1+IHMvXFwvXC8vZzsKKyRYRVJDRVNDUk9PVCA9fiBzL1xcL1wvL2c7CiAkSUNVUk9PVCA9fiBzL1xcL1wvL2c7CiAKLSMgUmVhZCB0aGUgdGFyZ2V0IHZlcnNpb24gZnJvbSB0aGUgZmlsZSAkWE1MNENST09UL3NyYy91dGlsL1hNTDRDRGVmcy5ocHAKLSR2ZXJzaW9uZmlsZSA9ICIkWE1MNENST09UL3NyYy91dGlsL1hNTDRDRGVmcy5ocHAiOworIyBSZWFkIHRoZSB0YXJnZXQgdmVyc2lvbiBmcm9tIHRoZSBmaWxlICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9YTUw0Q0RlZnMuaHBwCiskdmVyc2lvbmZpbGUgPSAiJFhFUkNFU0NST09UL3NyYy91dGlsL1hNTDRDRGVmcy5ocHAiOwogJG9wZW5yZXN1bHQgPSBvcGVuIChWRVJTSU9ORklMRSwgIjwkdmVyc2lvbmZpbGUiKTsKIAogaWYgKCRvcGVucmVzdWx0ID09IDApIHsKQEAgLTUwLDE1ICs1MCwxMSBAQAogICAgaWYgKCRmaWxlbGluZSA9fiAvZ1hNTDRDRnVsbFZlcnNpb25TdHIgPSBcIiguKilcIi8pIHsKICAgICAgJGJpbmFyeXRhcmdldGRpciA9ICQxOyAgIyBXZSBmb3VuZCB0aGUgdmVyc2lvbiBzdHJpbmcgaW5zaWRlIHRoaXMgZmlsZQogICAgfQotICAgaWYgKCRmaWxlbGluZSA9fiAvZ1hNTDRDVmVyc2lvblN0ciA9IFwiKC4qKVwiLykgewotICAgICAgJGxpYnJhcnl2ZXJzaW9uID0gJDE7Ci0gICB9CiB9CiBjbG9zZShWRVJTSU9ORklMRSk7CiAKICRiaW5hcnl0YXJnZXRkaXIgPX4gcy9cLi9fL2c7ICAgICMgU3Vic3RpdHV0ZSB0aGUgZG90cwogJGJpbmFyeXRhcmdldGRpciA9fiBzL1xzL18vZzsgICAgIyBTdWJzdGl0dXRlIHRoZSBibGFua3MKLSRiaW5hcnlkaXJlY3RvcnluYW1lID0gInhtbDRjIiAuICRiaW5hcnl0YXJnZXRkaXI7ICAjIElzIHRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgZGlyZWN0b3J5CiAkYmluYXJ5dGFyZ2V0ZGlyID1+IHMvXFwvXC8vZzsgICAjIEZpeCB0aGUgYmFja3NsYXNoZXMsIGlmIHRoZXkgZXhpc3QsIHByb2JhYmx5IGRvZXNuJ3QKIAogIyBOb3cgY2hlY2sgaWYgdGhlIHRhcmdldCBkaXJlY3RvcnkgZXhpc3RzLCBleGl0IGlmIGl0IGRvZXMKQEAgLTY4LDggKzY0LDEwIEBACiAgICAgICAgIGV4aXQoMSk7CiB9CiAKLQotJHNyY3ppcGZpbGVzID0gJE9VVFBVVERJUiAuICIvKiI7CisjQ29uc3RydWN0IHRoZSBuYW1lIG9mIHRoZSB6aXAgZmlsZSBieSBleHRyYWN0aW5nIHRoZSBsYXN0IGRpcmVjdG9yeSBuYW1lCiskc3JjemlwZmlsZXMgPSAkT1VUUFVURElSOworJHNyY3ppcGZpbGVzID1+IHMvLipcLyhbXHd8LV0qKSQvJDEvZzsKKyRzcmN6aXBmaWxlcyA9ICRzcmN6aXBmaWxlcyAuICIvKiI7CiAkc3JjdGFyZ2V0ZGlyID0gJE9VVFBVVERJUjsKIAogIyBGaW5kIG91dCB0aGUgcGxhdGZvcm0gZnJvbSAndW5hbWUgLWEnCkBAIC03OSwxMiArNzcsMTIgQEAKICRwbGF0Zm9ybSA9ICQxOwogY2xvc2UgKFBMQVRGT1JNKTsKIAotcHJpbnQgIlxuUGFja2FnaW5nIFhNTDRDIHNvdXJjZXMgaW4gIiAuICRzcmN0YXJnZXRkaXIgLiAiIG9uIHBsYXRmb3JtICIgLiAkcGxhdGZvcm0gLiAiLi4uXG4iOworcHJpbnQgIlxuUGFja2FnaW5nIFhFUkNFUy1DIHNvdXJjZXMgaW4gIiAuICRzcmN0YXJnZXRkaXIgLiAiIG9uIHBsYXRmb3JtICIgLiAkcGxhdGZvcm0gLiAiLi4uXG4iOwogCiAjIEJ1aWxkIHRoZSBBUEkgZG9jcwogJGRvY3BwZmlsZWxpc3QgPSAiIjsKIAotJGhwcGRpciA9ICIkWE1MNENST09UL3NyYy9zYXgiOworJGhwcGRpciA9ICIkWEVSQ0VTQ1JPT1Qvc3JjL3NheCI7CiBjaGRpciAoJGhwcGRpcik7CiBvcGVuZGlyIChUSElTRElSLCAkaHBwZGlyKTsKIEBhbGxmaWxlcyA9IGdyZXAoIS9eXC5cLj8kLywgcmVhZGRpcihUSElTRElSKSk7CkBAIC05NCw3ICs5Miw3IEBACiAgICAgICAgJGRvY3BwZmlsZWxpc3QgPSAkZG9jcHBmaWxlbGlzdCAuICIgIiAuICRocHBkaXIgLiAiLyIgLiAkaHBwZmlsZTsKIH0KIAotJGhwcGRpciA9ICIkWE1MNENST09UL3NyYy9kb20iOworJGhwcGRpciA9ICIkWEVSQ0VTQ1JPT1Qvc3JjL2RvbSI7CiBjaGRpciAoJGhwcGRpcik7CiBvcGVuZGlyIChUSElTRElSLCAkaHBwZGlyKTsKIEBhbGxmaWxlcyA9IGdyZXAoIS9eXC5cLj8kLywgcmVhZGRpcihUSElTRElSKSk7CkBAIC0xMDUsMTEgKzEwMywxMSBAQAogICAgICAgICRkb2NwcGZpbGVsaXN0ID0gJGRvY3BwZmlsZWxpc3QgLiAiICIgLiAkaHBwZGlyIC4gIi8iIC4gJGhwcGZpbGU7CiB9CiAKLSRkb2NwcGZpbGVsaXN0ID0gJGRvY3BwZmlsZWxpc3QgLiAiICRYTUw0Q1JPT1Qvc3JjL2RvbS9ET01TdHJpbmcuaHBwIjsKLSRkb2NwcGZpbGVsaXN0ID0gJGRvY3BwZmlsZWxpc3QgLiAiICRYTUw0Q1JPT1Qvc3JjL2ZyYW1ld29yay9YTUxEb2N1bWVudEhhbmRsZXIuaHBwIjsKLSRkb2NwcGZpbGVsaXN0ID0gJGRvY3BwZmlsZWxpc3QgLiAiICRYTUw0Q1JPT1Qvc3JjL2ZyYW1ld29yay9YTUxFbnRpdHlIYW5kbGVyLmhwcCI7CiskZG9jcHBmaWxlbGlzdCA9ICRkb2NwcGZpbGVsaXN0IC4gIiAkWEVSQ0VTQ1JPT1Qvc3JjL2RvbS9ET01TdHJpbmcuaHBwIjsKKyRkb2NwcGZpbGVsaXN0ID0gJGRvY3BwZmlsZWxpc3QgLiAiICRYRVJDRVNDUk9PVC9zcmMvZnJhbWV3b3JrL1hNTERvY3VtZW50SGFuZGxlci5ocHAiOworJGRvY3BwZmlsZWxpc3QgPSAkZG9jcHBmaWxlbGlzdCAuICIgJFhFUkNFU0NST09UL3NyYy9mcmFtZXdvcmsvWE1MRW50aXR5SGFuZGxlci5ocHAiOwogCi1zeXN0ZW0gKCJkb2MrKyAtZCAkWE1MNENST09UL2RvYy9hcGlEb2NzIC1CICRYTUw0Q1JPT1QvZG9jL3RhaWwuaHRtbCAtYSAtRyAtayAtSCAtUyAkZG9jcHBmaWxlbGlzdCIpOworc3lzdGVtICgiZG9jKysgLWQgJFhFUkNFU0NST09UL2RvYy9hcGlEb2NzIC1CICRYRVJDRVNDUk9PVC9kb2MvdGFpbC5odG1sIC1hIC1HIC1rIC1IIC1TICRkb2NwcGZpbGVsaXN0Iik7CiAKICZwYWNrYWdlX3NvdXJjZXMoKTsKIApAQCAtMTI1LDggKzEyMyw4IEBACiAgICBwcmludCAoIlxuQ29weWluZyBzb3VyY2UgdHJlZSAuLi5cbiIpOwogICAgc3lzdGVtICgibWtkaXIgJHNyY3RhcmdldGRpciIpOwogICAgcHJpbnQgKCJUYXJnZXRkaXIgaXMgOiAiIC4gJHNyY3RhcmdldGRpciAuICJcbiIpOwotICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC8qICRzcmN0YXJnZXRkaXIiKTsKLSAgIHN5c3RlbSgiY3AgJFhNTDRDUk9PVC9kb2MvbGljZW5zZS5odG1sICRzcmN0YXJnZXRkaXIiKTsKKyAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC8qICRzcmN0YXJnZXRkaXIiKTsKKyAgIHN5c3RlbSgiY3AgJFhFUkNFU0NST09UL2RvYy9saWNlbnNlLmh0bWwgJHNyY3RhcmdldGRpciIpOwogCiAgICBpZiAoJHBsYXRmb3JtID1+IG0vV2luZG93cy8pIHsKICAgICAgICRSTSA9ICJybSI7CkBAIC0xOTUsMTEgKzE5Myw2IEBACiAgICAjIFdhbGsgdGhyb3VnaCB0aGUgc291cmNlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGRlbGV0ZSBhbGwgQ1ZTIGRpcmVjdG9yaWVzCiAgICAmZGVsZXRlQ1ZTZGlycygkc3JjdGFyZ2V0ZGlyKTsKIAotICAgI0NoYW5nZSB0aGUgdmVyc2lvbiBudW1iZXIgaW4gdGhlIHVzZXIgZG9jdW1lbnRhdGlvbgotICAgJmNoYW5nZV92ZXJzaW9uX251bWJlcigkc3JjdGFyZ2V0ZGlyIC4gIi9kb2MvaW5zdGFsbGF0aW9uLmh0bWwiLCAkYmluYXJ5ZGlyZWN0b3J5bmFtZSk7Ci0gICAmY2hhbmdlX3ZlcnNpb25fbnVtYmVyKCRzcmN0YXJnZXRkaXIgLiAiL2RvYy9wcm9ncmFtbWluZy5odG1sIiwgJGJpbmFyeWRpcmVjdG9yeW5hbWUpOwotICAgJmNoYW5nZV92ZXJzaW9uX251bWJlcigkc3JjdGFyZ2V0ZGlyIC4gIi9kb2MvZGlzdHJpYnV0aW9uLmh0bWwiLCAkYmluYXJ5ZGlyZWN0b3J5bmFtZSk7Ci0KICAgICMgcmVtb3ZlIHRoZSBleHBvcnQgY2xhdXNlcwogICAgY2hkaXIgKCIkc3JjdGFyZ2V0ZGlyL2RvYy9hcGlEb2NzIik7CiAgICBvcGVuZGlyIChUSElTRElSLCAiJHNyY3RhcmdldGRpci9kb2MvYXBpRG9jcyIpOwpAQCAtMjI2LDM2ICsyMTksMTEgQEAKICAgICAgIHByaW50ICgidGFyIC1jdmYgJHNyY3ppcG5hbWUgJHNyY3ppcGZpbGVzIik7CiAgICAgICBzeXN0ZW0gKCJ0YXIgLWN2ZiAkc3JjemlwbmFtZSAkc3JjemlwZmlsZXMiKTsKIAotICAgICAgc3lzdGVtICgiY29tcHJlc3MgJHNyY3ppcG5hbWUiKTsKKyAgICAgIHN5c3RlbSAoImd6aXAgJHNyY3ppcG5hbWUiKTsKICAgIH0KICAgIHByaW50ICgiRG9uZSB3aXRoIHBhY2thZ2luZyBzb3VyY2VzLlxuIik7CiB9CiAKLXN1YiBjaGFuZ2VfdmVyc2lvbl9udW1iZXIoKQotewotICAgICAgICBteSAoJHRoZWZpbGUsICR2ZXJzaW9uX251bSkgPSBAXzsKLSAgICAgICAgcHJpbnQgIlxuQ2hhbmdpbmcgYWxsIHZlcnNpb24gbnVtYmVycyBpbiBmaWxlICR0aGVmaWxlIHRvICR2ZXJzaW9uX251bSI7Ci0gICAgICAgIG15ICR0aGVmaWxlZG90YmFrID0gJHRoZWZpbGUgLiAiLmJhayI7Ci0gICAgICAgIHJlbmFtZSAoJHRoZWZpbGUsICR0aGVmaWxlZG90YmFrKTsKLQotICAgICAgICAkZGxsX25hbWUgPSAieG1sNGMiIC4gJGxpYnJhcnl2ZXJzaW9uOwotICAgICAgICAkZGxsX25hbWUgPX4gdHIvYS16L0EtWi87Ci0gICAgICAgIG15ICRzcmN2ZXJzaW9uX251bSA9ICR2ZXJzaW9uX251bTsKLSAgICAgICAgJHNyY3ZlcnNpb25fbnVtID1+IHMveG1sNGMyL3htbDRjc3JjMi9pZzsKLSAgICAgICAgb3BlbiAoRklaWkxFLCAkdGhlZmlsZWRvdGJhayk7Ci0gICAgICAgIG9wZW4gKEZJWlpMRU9VVCwgIj4kdGhlZmlsZSIpOwotICAgICAgICB3aGlsZSAoJGxpbmUgPSA8RklaWkxFPikgewotICAgICAgICAgICAgICAgICRsaW5lID1+IHMveG1sNGMyc3JjcmVsZWFzZW51bS8kc3JjdmVyc2lvbl9udW0vaWc7Ci0gICAgICAgICAgICAgICAgJGxpbmUgPX4gcy94bWw0YzJyZWxlYXNlbnVtLyR2ZXJzaW9uX251bS9pZzsKLSAgICAgICAgICAgICAgICAkbGluZSA9fiBzL1hNTDRDMmRsbG5hbWUvJGRsbF9uYW1lL2lnOwotICAgICAgICAgICAgICAgIHByaW50IEZJWlpMRU9VVCAkbGluZTsKLSAgICAgICAgfQotICAgICAgICBjbG9zZSAoRklaWkxFT1VUKTsKLSAgICAgICAgY2xvc2UgKEZJWlpMRSk7Ci0gICAgICAgIHVubGluayAoJHRoZWZpbGVkb3RiYWspOwotfQotCi0KIHN1YiByZW1vdmVfZXhwb3J0X2NsYXVzZXMoKQogewogICAgICAgICBteSAoJHRoZWZpbGUpID0gQF87CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuaW4gYi9zcmMvTWFrZWZpbGUuaW4KaW5kZXggZmZkMjU0NS4uZDlmYTZjYSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmluCisrKyBiL3NyYy9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMzIgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowMjo1NCAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS43ICAxOTk5LzEyLzE0IDIzOjUzOjE4ICByYWh1bGoKKyMgUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisjIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjYgIDE5OTkvMTEvMjQgMjM6MjE6NDIgIHJhaHVsagorIyBOb3cgd29ya3MgdW5kZXIgSFBVWCAxMC4yMCB3aXRoIENDIGFuZCBhQ0MsIHdpdGggSUNVIGFuZCBuYXRpdmUKKyMgZGlzdGNsZWFuIHRhcmdldCBub3cgcmVtb3ZlIGFuZCByZW1haW5pbmcgTWFrZWZpbGUocykKKyMgY2xlYW4gdGFyZ2V0IG5vdyByZW1vdmVzIHRoZSB0ZW1wbGF0ZSByZXBvc2l0b3J5IGRpcmVjdG9yeQorIworIyBSZXZpc2lvbiAxLjUgIDE5OTkvMTEvMjMgMDE6NTk6MjUgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCisjIFJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMTIgMjE6MTQ6MzIgIHJhaHVsagorIyBmaXhlZCB2ZXIgbnVtYmVyLgorIworIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6Mzg6NDggIHJhaHVsagorIyBSZXBsYWNlZCBYTUw0Q1JPT1Qgd2l0aCBYRVJDRVNDUk9PVC4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMjo1NCAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjI6MzY6MzkgIGFudXBhbQogIyBSZW1vdmVkIHRoZSBvdmVycmlkZWQgZGVmaW5pdGlvbiBvZiBYTUw0Q1JPT1QKQEAgLTcyLDEzICs5Niw5IEBACiAjIEJlZm9yZSB5b3UgdHJ5IHRvIHJ1biB0aGUgTWFrZWZpbGUsIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0d28gICAgICAjCiAjIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jICAgZXhwb3J0IFhNTDRDUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIFhNTDRDPiAgICAjCi0jICAgZXhwb3J0IElDVVJPT1Q9PHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IGluc3RhbGxlZCBJQ1U+ICAgICAgICAjCisjIGV4cG9ydCBYRVJDRVNDUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIFhFUkNFUy1DPiAjCisjICAgICBleHBvcnQgSUNVUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIElDVT4gICAgICAjCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jIEFsc28sIHRvIGVuYWJsZSBkZWJ1Z2dpbmcsIHlvdSBtdXN0IHR5cGU6ICAgICAgICAgICAgICAgICAgICAgICAjCi0jICAgZXhwb3J0IERFQlVHPTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jIFRvIGRpc2FibGUgZGVidWdnaW5nLCB5b3UgbXVzdCB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jICAgdW5zZXQgREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjTUFDUk9TIGRlZmluaW5nIGNvbW1hbmRzCiBNS0RJUj1ta2RpcgpAQCAtOTQsMjYgKzExNCwyNyBAQAogRE9NX0RJUiA9IGRvbQogUEFSU0VSU19ESVIgPSBwYXJzZXJzCiBWQUxJREFUT1JTX0RURF9ESVIgPSB2YWxpZGF0b3JzL0RURAotQUxMX09CSkVDVFNfRElSID0gJHtYTUw0Q1JPT1R9L29iagotTElCX0RJUiA9ICR7WE1MNENST09UfS9saWIKK0FMTF9PQkpFQ1RTX0RJUiA9ICR7WEVSQ0VTQ1JPT1R9L29iagorTElCX0RJUiA9ICR7WEVSQ0VTQ1JPT1R9L2xpYgogCi1MSUIgPSAke1hNTDRDUk9PVH0vbGliCi1MSUJOQU1FID0gbGliSVhYTUw0QworTElCID0gJHtYRVJDRVNDUk9PVH0vbGliCitMSUJOQU1FID0gbGlieGVyY2VzLWMKIFRISVNMSUIgPSAke0xJQn0vJHtMSUJOQU1FfQotVkVSID0gM18wCitWRVIgPSAxXzAKIAogQUxMX09CSkVDVFMgPSAkKHdpbGRjYXJkICR7QUxMX09CSkVDVFNfRElSfS8qLm8pCiAKICNhbGwgdGhlc2Ugc2V0dGluZyBjb21lIGZyb20gdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW4gdG8gcnVuQ29uZmlndXJlLgogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBQUkVGSVggPSBAcHJlZml4QAogTUVTU0FHRUxPQURFUj1AbWVzc2FnZWxvYWRlckAKIFRSQU5TQ09ERVI9QHRyYW5zY29kZXJACiAKIFBST0RVQ1ROQU1FPXhlcmNlcwogUFJPRFVDVFZFUlNJT049JHtWRVJ9Ci1CSU5UQVJHRVRESVI9JHtIT01FfS8ke1BST0RVQ1ROQU1FfS1jLSR7UExBVEZPUk19LSR7Q09NUElMRVJ9LSR7UFJPRFVDVFZFUlNJT059CitCSU5UQVJHRVRESVI9JHtIT01FfS8ke1BST0RVQ1ROQU1FfS1jLSR7UExBVEZPUk19LSR7Q1hYfS0ke1BST0RVQ1RWRVJTSU9OfQogCiBhbGw6IFByZXBhcmUgVXRpbCBTYXggSW50ZXJuYWwgRnJhbWV3b3JrIFBhcnNlcnMgRG9tIFZhbGlkYXRvcnMgJHtUSElTTElCfSR7VkVSfSR7U0hMSUJTVUZGSVh9CiAKQEAgLTE5NSw2ICsyMTYsNyBAQAogCSR7Q0R9ICQoVkFMSURBVE9SU19EVERfRElSKSAmJiAkKE1BS0UpICRAICYmICR7Q0R9IC4uLy4uCiAJJHtDRH0gJChBTExfT0JKRUNUU19ESVIpICYmICQoTUFLRSkgJEAgJiYgJHtDRH0gLi4KIAlybSAtZiBNYWtlZmlsZSBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzCisJZmluZCAuIC1uYW1lIE1ha2VmaWxlIC1wcmludCAtZXhlYyBybSAtZiB7fSBcOwogCXJtIC1mICp+IGNvcmUKIAogI2RvY3M6IApAQCAtMjM2LDI0ICsyNTgsMjQgQEAKIAogCUBlY2hvIFBvcHVsYXRlIHRoZSBpbmNsdWRlIG91dHB1dCBkaXJlY3RvcnkKIAlAZWNobyBDb3B5aW5nIGhlYWRlcnMgZmlsZXMgLi4uCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc3JjL3NheC8qLmhwcCAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9zYXgKLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9zcmMvZnJhbWV3b3JrLyouaHBwICR7QklOVEFSR0VURElSfS9pbmNsdWRlL2ZyYW1ld29yawotCS0ke0NQfSAtUmYgJHtYTUw0Q1JPT1R9L3NyYy9kb20vRE9NKi5ocHAgJHtCSU5UQVJHRVRESVJ9L2luY2x1ZGUvZG9tCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc3JjL2ludGVybmFsLyouaHBwICR7QklOVEFSR0VURElSfS9pbmNsdWRlL2ludGVybmFsCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc3JjL2ludGVybmFsLyouYyAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9pbnRlcm5hbAotCS0ke0NQfSAtUmYgJHtYTUw0Q1JPT1R9L3NyYy9wYXJzZXJzLyouaHBwICR7QklOVEFSR0VURElSfS9pbmNsdWRlL3BhcnNlcnMKLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9zcmMvdXRpbC8qLmhwcCAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS91dGlsCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc3JjL3V0aWwvKi5jICR7QklOVEFSR0VURElSfS9pbmNsdWRlL3V0aWwKKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L3NyYy9zYXgvKi5ocHAgJHtCSU5UQVJHRVRESVJ9L2luY2x1ZGUvc2F4CisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9zcmMvZnJhbWV3b3JrLyouaHBwICR7QklOVEFSR0VURElSfS9pbmNsdWRlL2ZyYW1ld29yaworCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL2RvbS9ET00qLmhwcCAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9kb20KKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L3NyYy9pbnRlcm5hbC8qLmhwcCAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9pbnRlcm5hbAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL2ludGVybmFsLyouYyAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9pbnRlcm5hbAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL3BhcnNlcnMvKi5ocHAgJHtCSU5UQVJHRVRESVJ9L2luY2x1ZGUvcGFyc2VycworCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL3V0aWwvKi5ocHAgJHtCSU5UQVJHRVRESVJ9L2luY2x1ZGUvdXRpbAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL3V0aWwvKi5jICR7QklOVEFSR0VURElSfS9pbmNsdWRlL3V0aWwKIAktJHtDUH0gLVJmICR7SUNVUk9PVH0vaW5jbHVkZS8qICR7QklOVEFSR0VURElSfS9pbmNsdWRlL2ljdQogCiAJQGVjaG8gUG9wdWxhdGUgdGhlIGJpbmFyeSBvdXRwdXQgZGlyZWN0b3J5CiAJQGVjaG8gQ29weWluZyBiaW5hcnkgb3V0cHV0cyAuLi4KLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9iaW4vKiAke0JJTlRBUkdFVERJUn0vYmluCisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9iaW4vKiAke0JJTlRBUkdFVERJUn0vYmluCiAJLSR7Q1B9IC1mICR7SUNVUk9PVH0vc291cmNlL3Rvb2xzL21ha2Vjb252L21ha2Vjb252ICR7QklOVEFSR0VURElSfS9iaW4KIAktJHtDUH0gLWYgJHtJQ1VST09UfS9saWIvbGliaWN1LXVjLiogJHtCSU5UQVJHRVRESVJ9L2xpYgotCS0ke0NQfSAtZiAke1hNTDRDUk9PVH0vbGliLyouYSAke0JJTlRBUkdFVERJUn0vbGliCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9saWIvKi5zbyAke0JJTlRBUkdFVERJUn0vbGliCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9saWIvKi5zbCAke0JJTlRBUkdFVERJUn0vbGliCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L2xpYi8qLmEgJHtCSU5UQVJHRVRESVJ9L2xpYgorCS0ke0NQfSAtZiAke1hFUkNFU0NST09UfS9saWIvKi5zbyAke0JJTlRBUkdFVERJUn0vbGliCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L2xpYi8qLnNsICR7QklOVEFSR0VURElSfS9saWIKIAogCS17Uk19IC1yZiAke0JJTlRBUkdFVERJUn0vYmluL29iagogCkBAIC0yNjMsMzEgKzI4NSwzMSBAQAogCiAJQGVjaG8gUG9wdWxhdGUgdGhlIHNhbXBsZXMgZGlyZWN0b3J5CiAJQGVjaG8gQ29weWluZyBzYW1wbGUgZmlsZXMgLi4uCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL2NvbmZpZy5ndWVzcyAJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKLQktJHtDUH0gLWYgJHtYTUw0Q1JPT1R9L3NhbXBsZXMvY29uZmlnLmguaW4gCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL2NvbmZpZy5zdWIgCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL2NvbmZpZ3VyZQkke0JJTlRBUkdFVERJUn0vc2FtcGxlcwotCS0ke0NQfSAtZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9jb25maWd1cmUuaW4JJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKLQktJHtDUH0gLWYgJHtYTUw0Q1JPT1R9L3NhbXBsZXMvaW5zdGFsbC1zaAkke0JJTlRBUkdFVERJUn0vc2FtcGxlcwotCS0ke0NQfSAtZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9ydW5Db25maWd1cmUgCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL01ha2VmaWxlLmluCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL01ha2VmaWxlLmluY2wgCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL01hZWZpbGUJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9jb25maWcuZ3Vlc3MgCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvY29uZmlnLmguaW4gCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvY29uZmlnLnN1YiAJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9jb25maWd1cmUJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9jb25maWd1cmUuaW4JJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9pbnN0YWxsLXNoCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvcnVuQ29uZmlndXJlIAkke0JJTlRBUkdFVERJUn0vc2FtcGxlcworCS0ke0NQfSAtZiAke1hFUkNFU0NST09UfS9zYW1wbGVzL01ha2VmaWxlLmluCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvTWFrZWZpbGUuaW5jbCAJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9NYWVmaWxlCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCiAKLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9zYW1wbGVzL2RhdGEvKiAke0JJTlRBUkdFVERJUn0vc2FtcGxlcy9kYXRhCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9TQVhDb3VudC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL1NBWENvdW50Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9TQVhQcmludC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL1NBWFByaW50Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9ET01Db3VudC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL0RPTUNvdW50Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9ET01QcmludC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL0RPTVByaW50Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9SZWRpcmVjdC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL1JlZGlyZWN0Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9NZW1QYXJzZS8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL01lbVBhcnNlCisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9zYW1wbGVzL2RhdGEvKiAke0JJTlRBUkdFVERJUn0vc2FtcGxlcy9kYXRhCisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9zYW1wbGVzL1NBWENvdW50LyogJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMvU0FYQ291bnQKKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvU0FYUHJpbnQvKiAke0JJTlRBUkdFVERJUn0vc2FtcGxlcy9TQVhQcmludAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9ET01Db3VudC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL0RPTUNvdW50CisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9zYW1wbGVzL0RPTVByaW50LyogJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMvRE9NUHJpbnQKKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvUmVkaXJlY3QvKiAke0JJTlRBUkdFVERJUn0vc2FtcGxlcy9SZWRpcmVjdAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9NZW1QYXJzZS8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL01lbVBhcnNlCiAKIAlAZWNobyBQb3B1bGF0ZSB0aGUgZG9jcyBkaXJlY3RvcnkKIAlAZWNobyBDb3B5aW5nIGRvY3VtZW50YXRpb24gLi4KLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9kb2MvKiAke0JJTlRBUkdFVERJUn0vZG9jCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vZG9jL2FwaURvY3MvKiAke0JJTlRBUkdFVERJUn0vZG9jL2FwaURvY3MKLQktJHtDUH0gJHtYTUw0Q1JPT1R9L1JlYWRtZS5odG1sICR7QklOVEFSR0VURElSfQotCS0ke0NQfSAke1hNTDRDUk9PVH0vZG9jL2xpY2Vuc2UuaHRtbCAke0JJTlRBUkdFVERJUn0KKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L2RvYy8qICR7QklOVEFSR0VURElSfS9kb2MKKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L2RvYy9hcGlEb2NzLyogJHtCSU5UQVJHRVRESVJ9L2RvYy9hcGlEb2NzCisJLSR7Q1B9ICR7WEVSQ0VTQ1JPT1R9L1JlYWRtZS5odG1sICR7QklOVEFSR0VURElSfQorCS0ke0NQfSAke1hFUkNFU0NST09UfS9kb2MvbGljZW5zZS5odG1sICR7QklOVEFSR0VURElSfQogCiAJQGVjaG8gQ2hhbmdlIHRoZSBkaXJlY3RvcnkgcGVybWlzc2lvbnMKIAkte0NITU9ERX0gNjQ0IGBmaW5kICR7QklOVEFSR0VURElSfSAtdHlwZSBmYApkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmluY2wgYi9zcmMvTWFrZWZpbGUuaW5jbAppbmRleCBiNDQ2M2U1Li43MjhiOWI2IDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuaW5jbAorKysgYi9zcmMvTWFrZWZpbGUuaW5jbApAQCAtNTUsOCArNTUsMzMgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowMjo1NSAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS44ICAxOTk5LzEyLzE0IDIzOjUzOjE4ICByYWh1bGoKKyMgUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisjIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjcgIDE5OTkvMTIvMDkgMDA6NDg6MTkgIGFydW5hMQorIyBJQ1UgbGlicmFyeSBpbmNsdXNpb24gaW4gQUxMTElCUyBkdWUgdG8gc29sYXJpcyBmYWlsdXJlCisjCisjIFJldmlzaW9uIDEuNiAgMTk5OS8xMi8wMSAxNzoxNjoxNSAgcmFodWxqCisjIEFkZGVkIHN1cHBvcnQgZm9yIElSSVggNi41LjUgdXNpbmcgU0dJIE1JUFNwcm8gQysrIDcuMyBhbmQgNy4yMSBnZW5lcmF0aW5nIDMyIGJpdCBvYmplY3RzLiBDaGFuZ2VzIHN1Ym1pdHRlZCBieSBNYXJjIFN0dWVzc2VsCisjCisjIFJldmlzaW9uIDEuNSAgMTk5OS8xMS8yMyAwMTo1OToyOCAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KKyMgUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8xNyAyMjozNjozMSAgcmFodWxqCisjIENvZGUgd29ya3Mgd2l0aCBJQ1UgdHJhbnNjb2Rpbmcgc2VydmljZQorIworIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6Mzg6NDkgIHJhaHVsagorIyBSZXBsYWNlZCBYTUw0Q1JPT1Qgd2l0aCBYRVJDRVNDUk9PVC4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMjo1NSAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDQ6MDkgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY5LDcgKzk0LDcgQEAKICMgQmVmb3JlIHlvdSB0cnkgdG8gcnVuIHRoZSBNYWtlZmlsZSwgbWFrZSBzdXJlIHlvdSBoYXZlIHNldCAgICAgICMKICMgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJvcGVybHkuICAgICAgICAgICAgICAgICAgICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgZXhwb3J0IFhNTDRDUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIFhNTDRDPiAgICAgICMKKyMgZXhwb3J0IFhFUkNFU0NST09UPTx0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBpbnN0YWxsZWQgWFJFQ0VTLUM+ICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgSW4gY2FzZSB5b3UgaW50ZW5kIHRvIHVzZSBlaXRoZXIgdGhlIElDVSB0cmFuc2NvZGVyIG9yIHRoZSAgICAgICMKICMgSUNVIG1lc3NhZ2UgbG9hZGVyLCB5b3UgbXVzdCBzZXQgSUNVUk9PVCBjb3JyZWN0bHkuICAgICAgICAgICAgICMKQEAgLTk1LDQ0ICsxMjAsNTUgQEAKIAogQUxMOiAgICBhbGwKIAotQUxMX09CSkVDVFNfRElSID0gJHtYTUw0Q1JPT1R9L29iagorQUxMX09CSkVDVFNfRElSICAgPSAke1hFUkNFU0NST09UfS9vYmoKIAogWE1MX0JVSUxEX09QVElPTlMgPSAke0NYWEZMQUdTfQogCitYTUxfTElCX0RJUiA9ICQoWEVSQ0VTQ1JPT1QpL2xpYgorWE1MX0lOQ19ESVIgPSAkKFhFUkNFU0NST09UKS9pbmNsdWRlCitYTUxfSU5DTCAgICA9IC1JJChYTUxfSU5DX0RJUikKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUExBVEZPUk0gREVQRU5ERU5DSUVTICMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjPT09PT09PT09PT09PT09IFNPTEFSSVMgU1BFQ0lGSUMgT1BUSU9OUyA9PT09PT09PT09PT09PT09PT09PT09PT09CiBpZmVxICgke1BMQVRGT1JNfSwgU09MQVJJUykKLSAgaWZlcSAoJHtDT01QSUxFUn0sIGcrKykKLQlQTEFURk9STV9DUFBfQ09NUElMRVIgPSBnKysKLQlQTEFURk9STV9DX0NPTVBJTEVSID0gZ2NjCi0JUExBVEZPUk1fTElCUkFSSUVTPS1ML3Vzci9saWIgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvY2NzL2xpYgorICBpZmVxICgke0NYWH0sIGcrKykKIAlQTEFURk9STV9DT01QSUxFX09QVElPTlMgPSAtZlBJQyAtaW5zdGFuY2VzPXN0YXRpYyAtRCR7UExBVEZPUk19IC1EX1JFRU5UUkFOVAotCU1BS0VfU0hBUkVEID0gJHtQTEFURk9STV9DUFBfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0gLXNoYXJlZAotCU1BS0VfU0hBUkVEX0MgPSAke1BMQVRGT1JNX0NfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0gLXNoYXJlZAotCUVYVFJBX0xJTktfT1BUSU9OUyA9IC1sbSAtbHcgLWxnZW4KKwlNQUtFX1NIQVJFRCA9ICR7Q1hYfSAtRCR7UExBVEZPUk19IC1zaGFyZWQKKwlNQUtFX1NIQVJFRF9DID0gJHtDQ30gLUQke1BMQVRGT1JNfSAtc2hhcmVkCisJaWZlcSAoJHtUUkFOU0NPREVSfSwgSUNVKQorCQlBTExMSUJTID0gJHtMSUJTfSAtTC91c3IvbGliIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2Njcy9saWIgLWxpY3UtdWMgLWxtIC1sdyAtbGdlbgorCWVsc2UKKwkJQUxMTElCUyA9ICR7TElCU30gLUwvdXNyL2xpYiAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9jY3MvbGliIC1sbSAtbHcgLWxnZW4KKwllbmRpZgogICBlbHNlCi0JUExBVEZPUk1fQ1BQX0NPTVBJTEVSID0gQ0MKLQlQTEFURk9STV9DX0NPTVBJTEVSID0gY2MKLQlQTEFURk9STV9MSUJSQVJJRVM9LUwvdXNyL2xvY2FsL1NVTldzcHJvL2xpYiAtTC91c3IvY2NzL2xpYgogCVBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUyA9IC1LUElDIC1tdCAteHMgLWluc3RhbmNlcz1zdGF0aWMgLWZlYXR1cmVzPXJ0dGkgLUQke1BMQVRGT1JNfSAtRF9SRUVOVFJBTlQKLQlNQUtFX1NIQVJFRCA9ICR7UExBVEZPUk1fQ1BQX0NPTVBJTEVSfSAtRCR7UExBVEZPUk19IC1HCi0JTUFLRV9TSEFSRURfQyA9ICR7UExBVEZPUk1fQ19DT01QSUxFUn0gLUQke1BMQVRGT1JNfSAtRwotCUVYVFJBX0xJTktfT1BUSU9OUyA9IC1sbSAtbHcgLWxDIC1sYyAtbGdlbgorCU1BS0VfU0hBUkVEID0gJHtDWFh9IC1EJHtQTEFURk9STX0gLUcKKwlNQUtFX1NIQVJFRF9DID0gJHtDQ30gLUQke1BMQVRGT1JNfSAtRworCWlmZXEgKCR7VFJBTlNDT0RFUn0sIElDVSkKKwkJRVhUUkFfTElOS19PUFRJT05TID0gJHtMSUJTfSAtTC91c3IvbG9jYWwvU1VOV3Nwcm8vbGliIC1ML3Vzci9jY3MvbGliIC1saWN1LXVjIC1sbSAtbHcgLWxDIC1sYyAtbGdlbgorCWVsc2UKKwkJRVhUUkFfTElOS19PUFRJT05TID0gJHtMSUJTfSAtTC91c3IvbG9jYWwvU1VOV3Nwcm8vbGliIC1ML3Vzci9jY3MvbGliIC1sbSAtbHcgLWxDIC1sYyAtbGdlbgorCWVuZGlmCiAgIGVuZGlmCiAgIFNITElCU1VGRklYPS5zbwogZW5kaWYKIAogIz09PT09PT09PT09PT09PT09IEFJWCBTUEVDSUZJQyBPUFRJT05TID09PT09PT09PT09PT09PT09PT09PT09PT09PQogaWZlcSAoJHtQTEFURk9STX0sIEFJWCkKLVBMQVRGT1JNX0NQUF9DT01QSUxFUiA9IHhsQ19yCi1QTEFURk9STV9DX0NPTVBJTEVSID0geGxjX3IKLWlmZGVmIElDVVJPT1QKLSAgUExBVEZPUk1fTElCUkFSSUVTPS1ML3Vzci9scHAveGxDL2xpYiAtTCR7SUNVUk9PVH0vbGliCi0gIEVYVFJBX0xJTktfT1BUSU9OUyA9IC1saWN1LXVjIC1sYnNkCisKKyNQTEFURk9STV9DUFBfQ09NUElMRVIgPSB4bENfcgorI1BMQVRGT1JNX0NfQ09NUElMRVIgPSB4bGNfcgorI2lmZGVmIElDVVJPT1QKKyMgIEFMTExJQlMgPSAke0xJQlN9IC1ML3Vzci9scHAveGxDL2xpYiAtTCR7SUNVUk9PVH0vbGliIC1saWN1LXVjIC1sYnNkCisjZWxzZQorIyAgQUxMTElCUyA9IC1ML3Vzci9scHAveGxDL2xpYiAtbGJzZAorI2VuZGlmCisKK2lmZXEgKCR7VFJBTlNDT0RFUn0sIElDVSkKKwlBTExMSUJTID0gJHtMSUJTfSAtTC91c3IvbHBwL3hsQy9saWIgLWxpY3UtdWMgLWxic2QKIGVsc2UKLSAgUExBVEZPUk1fTElCUkFSSUVTPS1ML3Vzci9scHAveGxDL2xpYgotICBFWFRSQV9MSU5LX09QVElPTlMgPSAtbGJzZAorCUFMTExJQlMgPSAke0xJQlN9IC1ML3Vzci9scHAveGxDL2xpYiAtbGJzZAogZW5kaWYKIFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUyA9IC1xbm90ZW1waW5jIC1EX1RIUkVBRF9TQUZFCiBNQUtFX1NIQVJFRCA9IG1ha2VDKytTaGFyZWRMaWJfciAtcCA1MDAwCkBAIC0xNDIsMjAgKzE3OCwzNCBAQAogCiAjPT09PT09PT09PT09PT09IExJTlVYIFNQRUNJRklDIE9QVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT09PQogaWZlcSAoJHtQTEFURk9STX0sIExJTlVYKQotUExBVEZPUk1fQ1BQX0NPTVBJTEVSID0gZysrCi1QTEFURk9STV9DX0NPTVBJTEVSID0gZ2NjCi1QTEFURk9STV9MSUJSQVJJRVM9LUwvdXNyL2xpYiAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9jY3MvbGliCiBQTEFURk9STV9DT01QSUxFX09QVElPTlMgPSAtZnBpYyAtaW5zdGFuY2VzPXN0YXRpYyAtRCR7UExBVEZPUk19IC1EX1JFRU5UUkFOVAotTUFLRV9TSEFSRUQgPSAke1BMQVRGT1JNX0NQUF9DT01QSUxFUn0gLUQke1BMQVRGT1JNfSAtc2hhcmVkIC1mcGljCi1NQUtFX1NIQVJFRF9DID0gJHtQTEFURk9STV9DX0NPTVBJTEVSfSAtRCR7UExBVEZPUk19IC1zaGFyZWQgLWZwaWMKLUVYVFJBX0xJTktfT1BUSU9OUyA9IC1sYworTUFLRV9TSEFSRUQgPSAke0NYWH0gLUQke1BMQVRGT1JNfSAtc2hhcmVkIC1mcGljCitNQUtFX1NIQVJFRF9DID0gJHtDQ30gLUQke1BMQVRGT1JNfSAtc2hhcmVkIC1mcGljCitpZmVxICgke1RSQU5TQ09ERVJ9LCBJQ1UpCisJQUxMTElCUyA9ICR7TElCU30gLUwvdXNyL2xpYiAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9jY3MvbGliIC1saWN1LXVjIC1sYworZWxzZQorCUFMTExJQlMgPSAke0xJQlN9IC1ML3Vzci9saWIgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvY2NzL2xpYiAtbGMKK2VuZGlmCiBTSExJQlNVRkZJWD0uc28KIGVuZGlmCiAKKyM9PT09PT09PT09PT09PT0gSVJJWCBTUEVDSUZJQyBPUFRJT05TID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2lmZXEgKCR7UExBVEZPUk19LCBJUklYKQorUExBVEZPUk1fQ09NUElMRV9PUFRJT05TID0gLW1pcHM0IC1MQU5HOnBjaCAtTEFORzpzdGQgLU8yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EJHtQTEFURk9STX0gLURfUkVFTlRSQU5UIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JL3Vzci9sb2NhbC9pbmNsdWRlCitPQkpfT1VUPSR7WE1MNENST09UfS9vYmovCitNQUtFX1NIQVJFRCA9ICR7Q1hYfSAtRCR7UExBVEZPUk19IC1zaGFyZWQKK01BS0VfU0hBUkVEX0MgPSAke0NDfSAtRCR7UExBVEZPUk19IC1zaGFyZWQKK0FMTExJQlMgPSAtTC91c3IvbGliMzIgLWxDCitTSExJQlNVRkZJWD0uc28KK2VuZGlmCisKKwogIz09PT09PT09PT09PT09PSBPUzIgU1BFQ0lGSUMgT1BUSU9OUyA9PT09PT09PT09PT09PT09PT09PT09PT09CiBpZmVxICgke1BMQVRGT1JNfSwgT1MvMikKLVBMQVRGT1JNX0NQUF9DT01QSUxFUiA9IGljYwotUExBVEZPUk1fQ19DT01QSUxFUiA9IGljYworI1BMQVRGT1JNX0NQUF9DT01QSUxFUiA9IGljYworI1BMQVRGT1JNX0NfQ09NUElMRVIgPSBpY2MKIFBMQVRGT1JNX0xJQlJBUklFUz0gQ1BQT00zMC5MSUIgb3MyMzg2LmxpYiBtbXBtMi5saWIKIFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUyA9IC9DKyAvR2QtIC9HZS0gL0dtKyAvR3MtIC9SZSAvSisgIC9NcyAvU20gL1NuIC9TcysKIE1BS0VfU0hBUkVEID0gaWxpbmsgL25vZnJlZQpAQCAtMTY4LDQwICsyMTgsNiBAQAogZW5kaWYKIAogIz09PT09PT09PT09PT09PT09IEhQIFNQRUNJRklDIE9QVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jaWZlcSAoJHtQTEFURk9STX0sIEhQVVgpCi0jICBpZmVxICgke0NPTVBJTEVSfSwgYUNDKQotIyAgICBQTEFURk9STV9DUFBfQ09NUElMRVIgPSBhQ0MKLSMgICAgUExBVEZPUk1fQ19DT01QSUxFUiA9IGFDQwotIyAgICBQTEFURk9STV9MSUJSQVJJRVM9LUwvb3B0L2FDQy9saWIgLUwvdXNyL2Njcy9saWIKLSMgICAgUExBVEZPUk1fQ09NUElMRV9PUFRJT05TID0gJChDT01QSUxFU1dJVENIKSAtRF9IUF9VWCAtREhQYUNDIC1EX1BUSFJFQURTX0RSQUZUNCBcCi0jICAgICAgICArREFwb3J0YWJsZSAtdyAreiAraW5zdF9jb21waWxldGltZQotIyAgICBNQUtFX1NIQVJFRCA9ICR7UExBVEZPUk1fQ1BQX0NPTVBJTEVSfSAtRCR7UExBVEZPUk19IC1iCi0jICAgIE1BS0VfU0hBUkVEX0MgPSAke1BMQVRGT1JNX0NfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0gLWIKLSMgICAgRVhUUkFfTElOS19PUFRJT05TID0gLWxjbWEgLWxDc3VwIC1sc3RyZWFtCi0jICAgIFNITElCU1VGRklYPS5zbAotIyAgZWxzZQotIyAgICBpZm5lcSAoJHtERUJVR30sIDEpCi0jICAgICAgWE1MX0JVSUxEX09QVElPTlMgPSAtdyArTzEKLSMgICAgZW5kaWYKLSMgICAgUExBVEZPUk1fQ1BQX0NPTVBJTEVSID0gQ0MKLSMgICAgUExBVEZPUk1fQ19DT01QSUxFUiA9IGNjCi0jICAgIFBMQVRGT1JNX0xJQlJBUklFUz0gLUwke0lDVVJPT1R9L2xpYiAtTC9vcHQvQ0MvbGliIC1ML3Vzci9saWIKLSMgICAgVEVNUExBVEVTUkVQT1NJVE9SWSA9ICR7QUxMX09CSkVDVFNfRElSfS9wdHJlcG9zaXRvcnkKLSMgICAgQ09NTU9OX0NPTVBJTEVfT1BUSU9OUyA9ICQoQ09NUElMRVNXSVRDSCkgLURfSFBfVVggLURYTUw0Q19UTVBMU0lOQyBcCi0jICAgICAgICAtRF9QVEhSRUFEU19EUkFGVDQgK0RBcG9ydGFibGUgLXcgK2VoICt6IC16ICthMQotIyAgICBpZmVxICgkKE1PRFVMRSksIGRvbSkKLSMgICAgICBQTEFURk9STV9DT01QSUxFX09QVElPTlMgID0gLURET01fUFJPSiAkKENPTU1PTl9DT01QSUxFX09QVElPTlMpCi0jICAgIGVsc2UKLSMgICAgICBQTEFURk9STV9DT01QSUxFX09QVElPTlMgID0gJChDT01NT05fQ09NUElMRV9PUFRJT05TKSAtcHRyJHtURU1QTEFURVNSRVBPU0lUT1JZfQotIyAgICBlbmRpZgotIyAgICBBTExJTkNMVURFUz0gLUkkKFhNTDRDUk9PVCkvc3JjIC1JJChJQ1VST09UKS9pbmNsdWRlCi0jICAgIE1BS0VfU0hBUkVEID0gJChQTEFURk9STV9DUFBfQ09NUElMRVIpICQoUExBVEZPUk1fQ09NUElMRV9PUFRJT05TKSAkKEFMTElOQ0xVREVTKQotIyAgICBNQUtFX1NIQVJFRF9DID0gJChQTEFURk9STV9DX0NPTVBJTEVSKSAkKFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUykgJChBTExJTkNMVURFUykKLSMgICAgQUxMTElCUyA9IC1saWN1LXVjIC1sY21hIC1sbQotIyAgICBFWFRSQV9MSU5LX09QVElPTlMgPSAtYiAtV2wsK3MgLVdsLC1hLHNoYXJlZAotIyAgICBTSExJQlNVRkZJWD0uc2wKLSMgIGVuZGlmCi0jZW5kaWYKIAogaWZlcSAoJHtQTEFURk9STX0sIEhQVVgpCiAKQEAgLTIxMCw0MSArMjI2LDMzIEBACiAgICAgT1NWRVJERUZJTkU9SFBVWDEwCiAgIGVuZGlmCiAKLSAgaWZlcSAoJHtDT01QSUxFUn0sIGFDQykKLSAgICBQTEFURk9STV9DUFBfQ09NUElMRVIgPSBhQ0MKLSAgICBQTEFURk9STV9DX0NPTVBJTEVSID0gYUNDCi0gICAgUExBVEZPUk1fQ09NUElMRV9PUFRJT05TID0gJChDT01QSUxFU1dJVENIKSAtRF9IUF9VWCAtREhQYUNDIFwKLSAgICAgICAgLURfUFRIUkVBRFNfRFJBRlQ0IC1EJHtPU1ZFUkRFRklORX0gK0RBcG9ydGFibGUgLXcgK3ogXAotICAgICAgICAraW5zdF9jb21waWxldGltZQotICAgIE1BS0VfU0hBUkVEID0gJHtQTEFURk9STV9DUFBfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0gLWIKLSAgICBNQUtFX1NIQVJFRF9DID0gJHtQTEFURk9STV9DX0NPTVBJTEVSfSAtRCR7UExBVEZPUk19IC1iCi0gICAgQUxMTElCUyA9IC1sY21hIC1sQ3N1cCAtbHN0cmVhbQorICBpZmVxICgke0NYWH0sIGFDQykKKyAgICBQTEFURk9STV9DT01QSUxFX09QVElPTlMgPSAtRF9IUF9VWCAtREhQYUNDIFwKKyAgICAgICAgLUQke09TVkVSREVGSU5FfSArREFwb3J0YWJsZSAreiAraW5zdF9jb21waWxldGltZQorICAgIE1BS0VfU0hBUkVEID0gJHtDWFh9IC1EJHtQTEFURk9STX0gLWIKKyAgICBNQUtFX1NIQVJFRF9DID0gJHtDQ30gLUQke1BMQVRGT1JNfSAtYgorCWlmZXEgKCR7VFJBTlNDT0RFUn0sIElDVSkKKyAgICAgICAgQUxMTElCUyA9ICR7TElCU30gLWxpY3UtdWMgLWxDc3VwIC1sc3RyZWFtCisJZWxzZQorICAgICAgICBBTExMSUJTID0gJHtMSUJTfSAtbENzdXAgLWxzdHJlYW0KKyAgICBlbmRpZgogICAgIFNITElCU1VGRklYPS5zbAogICBlbHNlCi0gICAgaWZuZXEgKCR7REVCVUd9LCAxKQotICAgICAgWE1MX0JVSUxEX09QVElPTlMgPSAtdyArTzEKLSAgICBlbmRpZgotICAgIFBMQVRGT1JNX0NQUF9DT01QSUxFUiA9IENDCi0gICAgUExBVEZPUk1fQ19DT01QSUxFUiA9IGNjCi1pZmRlZiBJQ1VST09UCi0gICAgUExBVEZPUk1fTElCUkFSSUVTPSAtTCR7SUNVUk9PVH0vbGliCi1lbmRpZgogICAgIFRFTVBMQVRFU1JFUE9TSVRPUlkgPSAke0FMTF9PQkpFQ1RTX0RJUn0vcHRyZXBvc2l0b3J5Ci0gICAgQ09NTU9OX0NPTVBJTEVfT1BUSU9OUyA9ICQoQ09NUElMRVNXSVRDSCkgLURfSFBfVVggLURYTUw0QzJfVE1QTFNJTkMgXAotICAgICAgICAtRF9QVEhSRUFEU19EUkFGVDQgLUQke09TVkVSREVGSU5FfSArREFwb3J0YWJsZSAtdyArZWggK3ogLXogK2ExCisgICAgQ09NTU9OX0NPTVBJTEVfT1BUSU9OUyA9IC1EX0hQX1VYIC1EWE1MNENfVE1QTFNJTkMgXAorICAgICAgICAtRCR7T1NWRVJERUZJTkV9ICtEQXBvcnRhYmxlICtlaCAreiAteiArYTEKICAgICBpZmVxICgkKE1PRFVMRSksIGRvbSkKICAgICAgIFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUyAgPSAtRERPTV9QUk9KICQoQ09NTU9OX0NPTVBJTEVfT1BUSU9OUykKICAgICBlbHNlCiAgICAgICBQTEFURk9STV9DT01QSUxFX09QVElPTlMgID0gJChDT01NT05fQ09NUElMRV9PUFRJT05TKSAtcHRyJHtURU1QTEFURVNSRVBPU0lUT1JZfQogICAgIGVuZGlmCi1pZmRlZiBJQ1VST09UCi0gICAgQUxMSU5DTFVERVM9LUkkKFhNTDRDUk9PVCkvc3JjL2NvbS9pYm0veG1sIC1JJChYTUw0Q1JPT1QpL3NyYyAtSSQoSUNVUk9PVCkvaW5jbHVkZQotZWxzZQotICAgIEFMTElOQ0xVREVTPS1JJChYTUw0Q1JPT1QpL3NyYy9jb20vaWJtL3htbCAtSSQoWE1MNENST09UKS9zcmMKLWVuZGlmCi0gICAgTUFLRV9TSEFSRUQgPSAkKFBMQVRGT1JNX0NQUF9DT01QSUxFUikgJChQTEFURk9STV9DT01QSUxFX09QVElPTlMpICQoQUxMSU5DTFVERVMpCi0gICAgTUFLRV9TSEFSRURfQyA9ICQoUExBVEZPUk1fQ19DT01QSUxFUikgJChQTEFURk9STV9DT01QSUxFX09QVElPTlMpICQoQUxMSU5DTFVERVMpCi0gICAgQUxMTElCUyA9IC1saWN1LXVjIC1sY21hIC1sbQorICAgIE1BS0VfU0hBUkVEID0gJChDWFgpICQoUExBVEZPUk1fQ09NUElMRV9PUFRJT05TKSAkKFhNTF9JTkNMKQorICAgIE1BS0VfU0hBUkVEX0MgPSAkKENDKSAkKFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUykgJChYTUxfSU5DTCkKKwlpZmVxICgke1RSQU5TQ09ERVJ9LCBJQ1UpCisgICAgICAgIEFMTExJQlMgPSAke0xJQlN9IC1saWN1LXVjCisJZWxzZQorICAgICAgICBBTExMSUJTID0gJHtMSUJTfQorCWVuZGlmCiAgICAgRVhUUkFfTElOS19PUFRJT05TID0gLWIgLVdsLCtzIC1XbCwtYSxzaGFyZWQKICAgICBTSExJQlNVRkZJWD0uc2wKICAgZW5kaWYKQEAgLTI4NiwzMiArMjk0LDEyIEBACiBDQVQgPSBjYXQKIEFSID0gYXIgLWNxdgogQ0QgPSBjZAotQ0MxID0gJHtQTEFURk9STV9DUFBfQ09NUElMRVJ9ICR7UExBVEZPUk1fQ09NUElMRV9PUFRJT05TfQotSlVTVF9DQyA9ICR7UExBVEZPUk1fQ19DT01QSUxFUn0gLUQke1BMQVRGT1JNfQorQ0MxICAgICA9ICR7Q1hYfSAke1BMQVRGT1JNX0NPTVBJTEVfT1BUSU9OU30KK0pVU1RfQ0MgPSAke0NDfSAtRCR7UExBVEZPUk19CiBFQ0hPID0gZWNobwogQ1JFQVRFX0RFUEVORFNfRklMRSA9IGVjaG8gIiIgPiBkZXBlbmRzCiBNQUtFX0RFUEVORCA9ICR7Q0MxfSAtRSAteE0KIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRElSRUNUT1JJRVMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotWE1MX0xJQl9ESVIgPSAkKFhNTDRDUk9PVCkvbGliCi1YTUxfSU5DX0RJUiA9ICQoWE1MNENST09UKS9pbmNsdWRlCi1pZmVxICgke01FU1NBR0VMT0FERVJ9LCBJQ1UpCi0gICAgSU5UTF9JTkNfRElSMSA9ICQoSUNVUk9PVCkvaW5jbHVkZQotZW5kaWYKLWlmZXEgKCR7VFJBTlNDT0RFUn0sIElDVSkKLSAgICBJTlRMX0lOQ19ESVIxID0gJChJQ1VST09UKS9pbmNsdWRlCi1lbmRpZgotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyBDT01QSUxFL0xJTksgRkxBR1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1pZmVxICgke01FU1NBR0VMT0FERVJ9LCBJQ1UpCi0gICAgWE1MX0lOQ0wgPSAtSS4gLUkkKFhNTF9JTkNfRElSKSAtSSQoSU5UTF9JTkNfRElSMSkKLWVsc2UKLSAgICBpZmVxICgke1RSQU5TQ09ERVJ9LCBJQ1UpCi0gICAgICAgIFhNTF9JTkNMID0gLUkuIC1JJChYTUxfSU5DX0RJUikgLUkkKElOVExfSU5DX0RJUjEpCi0gICAgZWxzZQotICAgICAgICBYTUxfSU5DTCA9IC1JLiAtSSQoWE1MX0lOQ19ESVIpCi0gICAgZW5kaWYKLWVuZGlmCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyBIRUxQRVIgTUFDUk9TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIERFUEZJTEUgPSBkZXBlbmRzCkBAIC0zMjMsNiArMzExLDkgQEAKIAogLmNwcC5vOgogCSQoQ0MxKSAtYyAkKFhNTF9CVUlMRF9PUFRJT05TKSAkKFhNTF9ERUYpICQoWE1MX0lOQ0wpICQoRVhUUkFfQ09NUElMRV9PUFRJT05TKSAtbyAkKEApICQoPCkKK2lmZXEgKCR7UExBVEZPUk19LCBJUklYKQorCSQoQ0MxKSAtYyAkKFhNTF9CVUlMRF9PUFRJT05TKSAkKFhNTF9ERUYpICQoWE1MX0lOQ0wpICQoRVhUUkFfQ09NUElMRV9PUFRJT05TKSAtbyAkKE9CSl9PVVQpJChAKSAkKDwpCitlbmRpZgogCiAuYy5vOgogCSQoSlVTVF9DQykgLWMgJChYTUxfQlVJTERfT1BUSU9OUykgJChYTUxfREVGKSAkKFhNTF9JTkNMKSAkKEVYVFJBX0NPTVBJTEVfT1BUSU9OUykgLW8gJChAKSAkKDwpCmRpZmYgLS1naXQgYS9zcmMvTkxTL0VOX1VTL1hNTEVyckxpc3RfRU5fVVMuWG1sIGIvc3JjL05MUy9FTl9VUy9YTUxFcnJMaXN0X0VOX1VTLlhtbAppbmRleCA5OGI4ODYzLi4wYWQyMGIwIDEwMDY0NAotLS0gYS9zcmMvTkxTL0VOX1VTL1hNTEVyckxpc3RfRU5fVVMuWG1sCisrKyBiL3NyYy9OTFMvRU5fVVMvWE1MRXJyTGlzdF9FTl9VUy5YbWwKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICAgICAgICAgPE1lc3NhZ2UgSWQ9IlVua25vd25Ob3RSZWZBdHRyIiBUZXh0PSJBdHRyaWJ1dGUgJ3swfScgcmVmZXJzIHRvIGFuIHVua25vd24gbm90YXRpb24gJ3sxfSciLz4KICAgICAgICAgICAgIDxNZXNzYWdlIElkPSJVbmRlY2xhcmVkRWxlbUluRG9jVHlwZSIgVGV4dD0iRWxlbWVudCAnezB9JyB3YXMgdXNlZCBpbiB0aGUgRE9DVFlQRSBidXQgbmV2ZXIgZGVjbGFyZWQiLz4KICAgICAgICAgICAgIDxNZXNzYWdlIElkPSJFbXB0eU5vdFZhbGlkRm9yQ29udGVudCIgVGV4dD0iRW1wdHkgY29udGVudCBub3QgdmFsaWQgZm9yIGNvbnRlbnQgbW9kZWw6ICd7MH0nIi8+Ci0gICAgICAgICAgICA8TWVzc2FnZSBJZD0iQXR0Tm90RGVmaW5lZEZvckVsZW1lbnQiIFRleHQ9IkF0dHJpYnV0ZSAne3swfX17MX0nIGlzIG5vdCBkZWNsYXJlZCBmb3IgZWxlbWVudCAnezJ9JyIvPgorICAgICAgICAgICAgPE1lc3NhZ2UgSWQ9IkF0dE5vdERlZmluZWRGb3JFbGVtZW50IiBUZXh0PSJBdHRyaWJ1dGUgJ3swfScgaXMgbm90IGRlY2xhcmVkIGZvciBlbGVtZW50ICd7MX0nIi8+CiAgICAgICAgICAgICA8TWVzc2FnZSBJZD0iQmFkRW50aXR5UmVmQXR0ciIgVGV4dD0iQXR0cmlidXRlcyBvZiB0eXBlIEVOVElUWS9FTlRJVElFUyBtdXN0IHJlZmVyIHRvIGFuIGV4dGVybmFsLCB1bnBhcnNlZCBlbnRpdHkiLz4KICAgICAgICAgICAgIDxNZXNzYWdlIElkPSJVbmtub3duRW50aXR5UmVmQXR0ciIgVGV4dD0iQXR0cmlidXRlICd7MH0nIHJlZmVycyB0byBhbiB1bmtub3duIGVudGl0eSAnezF9JyIvPgogICAgICAgICAgICAgPE1lc3NhZ2UgSWQ9Ik5vdEVub3VnaEVsZW1zRm9yQ00iIFRleHQ9Ik5vdCBlbm91Z2ggZWxlbWVudHMgdG8gbWF0Y2ggY29udGVudCBtb2RlbCA6ICd7MH0nIi8+CmRpZmYgLS1naXQgYS9zcmMvY29uZmlndXJlIGIvc3JjL2NvbmZpZ3VyZQppbmRleCAxYzBiNDBiLi5hNzI4NzdhIDEwMDc1NQotLS0gYS9zcmMvY29uZmlndXJlCisrKyBiL3NyYy9jb25maWd1cmUKQEAgLTEwNDksMTA1ICsxMDQ5LDkgQEAKIGZpCiAKIAotZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRocmVhZCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTA1NDogY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRocmVhZCIgPiY1Ci1hY19saWJfdmFyPWBlY2hvIHB0aHJlYWQnXydwdGhyZWFkX2NyZWF0ZSB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgotICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgotZWxzZQotICBhY19zYXZlX0xJQlM9IiRMSUJTIgotTElCUz0iLWxwdGhyZWFkICAkTElCUyIKLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEwNjIgImNvbmZpZ3VyZSIKLSNpbmNsdWRlICJjb25mZGVmcy5oIgotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBwdGhyZWFkX2NyZWF0ZSgpOwotCi1pbnQgbWFpbigpIHsKLXB0aHJlYWRfY3JlYXRlKCkKLTsgcmV0dXJuIDA7IH0KLUVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMDczOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgotZWxzZQotICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QqCi1MSUJTPSIkYWNfc2F2ZV9MSUJTIgotCi1maQotaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgotICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHB0aHJlYWQgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKLSAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAotICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgotI2RlZmluZSAkYWNfdHJfbGliIDEKLUVPRgotCi0gIExJQlM9Ii1scHRocmVhZCAkTElCUyIKLQotZWxzZQotICBlY2hvICIkYWNfdCIibm8iIDE+JjYKLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfY3JlYXRlID0gbm87IHRoZW4KLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2NyZWF0ZSBpbiAtbHB0aHJlYWRzIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxMTAyOiBjaGVja2luZyBmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxwdGhyZWFkcyIgPiY1Ci1hY19saWJfdmFyPWBlY2hvIHB0aHJlYWRzJ18ncHRocmVhZF9jcmVhdGUgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKLWVsc2UKLSAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKLUxJQlM9Ii1scHRocmVhZHMgICRMSUJTIgotY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTExMCAiY29uZmlndXJlIgotI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHB0aHJlYWRfY3JlYXRlKCk7Ci0KLWludCBtYWluKCkgewotcHRocmVhZF9jcmVhdGUoKQotOyByZXR1cm4gMDsgfQotRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjExMjE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgotICBybSAtcmYgY29uZnRlc3QqCi0gIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQotICBybSAtcmYgY29uZnRlc3QqCi0gIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdCoKLUxJQlM9IiRhY19zYXZlX0xJQlMiCi0KLWZpCi1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgotICBlY2hvICIkYWNfdCIieWVzIiAxPiY2Ci0gICAgYWNfdHJfbGliPUhBVkVfTElCYGVjaG8gcHRocmVhZHMgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKLSAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAotICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgotI2RlZmluZSAkYWNfdHJfbGliIDEKLUVPRgotCi0gIExJQlM9Ii1scHRocmVhZHMgJExJQlMiCi0KLWVsc2UKLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2Ci1maQotCi1maQogCiBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTE1MTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorZWNobyAiY29uZmlndXJlOjEwNTU6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKICMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCiBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgogICBDUFA9CkBAIC0xMTYyLDEzICsxMDY2LDEzIEBACiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDExNjYgImNvbmZpZ3VyZSIKKyNsaW5lIDEwNzAgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogU3ludGF4IEVycm9yCiBFT0YKIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjExNzI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cit7IChldmFsIGVjaG8gY29uZmlndXJlOjEwNzY6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CiBhY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICA6CkBAIC0xMTc5LDEzICsxMDgzLDEzIEBACiAgIHJtIC1yZiBjb25mdGVzdCoKICAgQ1BQPSIke0NDLWNjfSAtRSAtdHJhZGl0aW9uYWwtY3BwIgogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMTgzICJjb25maWd1cmUiCisjbGluZSAxMDg3ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KIFN5bnRheCBFcnJvcgogRU9GCiBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTg5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMDkzOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KICAgOgpAQCAtMTE5NiwxMyArMTEwMCwxMyBAQAogICBybSAtcmYgY29uZnRlc3QqCiAgIENQUD0iJHtDQy1jY30gLW5vbG9nbyAtRSIKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTIwMCAiY29uZmlndXJlIgorI2xpbmUgMTEwNCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiBTeW50YXggRXJyb3IKIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MTIwNjogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTExMDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KIGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKIGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCiAgIDoKQEAgLTEyMjYsNjAgKzExMzAsMTMgQEAKIGZpCiBlY2hvICIkYWNfdCIiJENQUCIgMT4mNgogCi1mb3IgYWNfaGRyIGluIGludHR5cGVzLmgKLWRvCi1hY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfaGRyIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxMjM0OiBjaGVja2luZyBmb3IgJGFjX2hkciIgPiY1Ci1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKLWVsc2UKLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTIzOSAiY29uZmlndXJlIgotI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0jaW5jbHVkZSA8JGFjX2hkcj4KLUVPRgotYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI0NDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKLWlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKLWVsc2UKLSAgZWNobyAiJGFjX2VyciIgPiY1Ci0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQotICBybSAtcmYgY29uZnRlc3QqCi0gIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdCoKLWZpCi1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgotICBlY2hvICIkYWNfdCIieWVzIiAxPiY2Ci0gICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgotI2RlZmluZSAkYWNfdHJfaGRyIDEKLUVPRgotIAotZWxzZQotICBlY2hvICIkYWNfdCIibm8iIDE+JjYKLWZpCi1kb25lCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm87IHRoZW4KLUhBVkVfSU5UVFlQRVNfSD0wCi1lbHNlCi1IQVZFX0lOVFRZUEVTX0g9MQotZmkKLQotCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTI3ODogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorZWNobyAiY29uZmlndXJlOjExMzU6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfc3RkYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEyODMgImNvbmZpZ3VyZSIKKyNsaW5lIDExNDAgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMTI4Nyw3ICsxMTQ0LDcgQEAKICNpbmNsdWRlIDxmbG9hdC5oPgogRU9GCiBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjkxOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTQ4OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgpAQCAtMTMwNCw3ICsxMTYxLDcgQEAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEzMDggImNvbmZpZ3VyZSIKKyNsaW5lIDExNjUgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0cmluZy5oPgogRU9GCkBAIC0xMzIyLDcgKzExNzksNyBAQAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTMyNiAiY29uZmlndXJlIgorI2xpbmUgMTE4MyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiBFT0YKQEAgLTEzNDMsNyArMTIwMCw3IEBACiAgIDoKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTM0NyAiY29uZmlndXJlIgorI2xpbmUgMTIwNCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQpAQCAtMTM1NCw3ICsxMjExLDcgQEAKIGV4aXQgKDApOyB9CiAKIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMzU4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyMTU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKIHRoZW4KICAgOgogZWxzZQpAQCAtMTM3OCwxMiArMTIzNSwxMiBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFhNTEJ5dGUiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEzODI6IGNoZWNraW5nIGZvciBYTUxCeXRlIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxMjM5OiBjaGVja2luZyBmb3IgWE1MQnl0ZSIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9YTUxCeXRlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTM4NyAiY29uZmlndXJlIgorI2xpbmUgMTI0NCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgU1REQ19IRUFERVJTCkBAIC0xNDE4LDcgKzEyNzUsNyBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTQyMjogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CitlY2hvICJjb25maWd1cmU6MTI3OTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CiAKIGhvc3RfYWxpYXM9JGhvc3QKIGNhc2UgIiRob3N0X2FsaWFzIiBpbgpAQCAtMTQ0MiwxNyArMTI5OSw1MCBAQAogY2FzZSAiJHtob3N0fSIgaW4KICAgICAgICAgKi0qLXNvbGFyaXMqKSAgIHBsYXRmb3JtPVNPTEFSSVMgOzsKICAgICAgICAgKi0qLWxpbnV4KikgICAgIHBsYXRmb3JtPUxJTlVYIDs7CisgICAgICAgICotKi1pcml4KikgICAgICBwbGF0Zm9ybT1JUklYIDs7CiAgICAgICAgICotKi1haXgqKSAgICAgICBwbGF0Zm9ybT1BSVggOzsKLSAgICAgICAgKi0qLWhwKikgICAgICAgIHBsYXRmb3JtPUhQVVggOzsKKyAgICAgICAgKi0qLWhwKikgICAgICAgIHBsYXRmb3JtPUhQVVggOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLSotaHB1eDExKikgIG9zdmVyPUhQVVgxMTs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi0qLWhwdXgxMCopICBvc3Zlcj1IUFVYMTA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICopICAgICAgICAgICAgb3N2ZXI9SFBVWDExOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYWM7OwogICAgICAgICAqLSotbXZzKikgICAgICAgcGxhdGZvcm09T1MzOTAgOzsKICAgICAgICAgKikgICAgICAgICAgICAgIHBsYXRmb3JtPVVOS05PV04gOzsKIGVzYWMKIAogCi1jb21waWxlcj0ke0NYWH0KK2N4eD0ke0NYWH0KIAogCi1wcmVmaXg9JHtwcmVmaXh9CitjYz0ke0NDfQorCisKKworCisKK2N4eGZsYWdzPSR7Q1hYRkxBR1N9CisKKworY3BwZmxhZ3M9JHtDUFBGTEFHU30KKworCitjZmxhZ3M9JHtDRkxBR1N9CisKKworbGRmbGFncz0ke0xEQ0ZMQUdTfQorCisKK2xpYnM9JHtMSUJTfQorCisKK3VzZWxpYnd3dz0ke1VTRUxJQldXV30KKworCittZXNzYWdlbG9hZGVyPSR7TUVTU0FHRUxPQURFUn0KKworCit0cmFuc2NvZGVyPSR7VFJBTlNDT0RFUn0KIAogCiB0cmFwICcnIDEgMiAxNQpAQCAtMTYyMiwxNCArMTUxMiwyMyBAQAogcyVASU5TVEFMTF9EQVRBQCUkSU5TVEFMTF9EQVRBJWcKIHMlQEFVVE9DT05GQCUkQVVUT0NPTkYlZwogcyVAQ1BQQCUkQ1BQJWcKLXMlQEhBVkVfSU5UVFlQRVNfSEAlJEhBVkVfSU5UVFlQRVNfSCVnCiBzJUBob3N0QCUkaG9zdCVnCiBzJUBob3N0X2FsaWFzQCUkaG9zdF9hbGlhcyVnCiBzJUBob3N0X2NwdUAlJGhvc3RfY3B1JWcKIHMlQGhvc3RfdmVuZG9yQCUkaG9zdF92ZW5kb3IlZwogcyVAaG9zdF9vc0AlJGhvc3Rfb3MlZwogcyVAcGxhdGZvcm1AJSRwbGF0Zm9ybSVnCi1zJUBjb21waWxlckAlJGNvbXBpbGVyJWcKK3MlQGN4eEAlJGN4eCVnCitzJUBjY0AlJGNjJWcKK3MlQG9zdmVyQCUkb3N2ZXIlZworcyVAY3h4ZmxhZ3NAJSRjeHhmbGFncyVnCitzJUBjcHBmbGFnc0AlJGNwcGZsYWdzJWcKK3MlQGNmbGFnc0AlJGNmbGFncyVnCitzJUBsZGZsYWdzQCUkbGRmbGFncyVnCitzJUBsaWJzQCUkbGlicyVnCitzJUB1c2VsaWJ3d3dAJSR1c2VsaWJ3d3clZworcyVAbWVzc2FnZWxvYWRlckAlJG1lc3NhZ2Vsb2FkZXIlZworcyVAdHJhbnNjb2RlckAlJHRyYW5zY29kZXIlZwogCiBDRU9GCiBFT0YKZGlmZiAtLWdpdCBhL3NyYy9jb25maWd1cmUuaW4gYi9zcmMvY29uZmlndXJlLmluCmluZGV4IDdmYmMwMWQuLjU4OTFiNDQgMTAwNjQ0Ci0tLSBhL3NyYy9jb25maWd1cmUuaW4KKysrIGIvc3JjL2NvbmZpZ3VyZS5pbgpAQCAtMTEsMjAgKzExLDE1IEBACiBkbmwgQ2hlY2tzIGZvciBsaWJyYXJpZXMKIEFDX0NIRUNLX0xJQihtLCBmbG9vcikKIAorZG5sCitkbmwgRG8gbm90IGtub3cgaG93IHRvIHVzZSB0aGlzIG1hY3JvLCBzbyBjb21tZW50IGl0IG91dC4KK2RubAogZG5sIHNwZWNpYWwgcHRocmVhZCBoYW5kbGluZyAoQUlYIHVzZXMgcHRocmVhZHMgaW5zdGVhZCBvZiBwdGhyZWFkKQotQUNfQ0hFQ0tfTElCKHB0aHJlYWQsIHB0aHJlYWRfY3JlYXRlKQotaWYgdGVzdCAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9jcmVhdGUgPSBubzsgdGhlbgotQUNfQ0hFQ0tfTElCKHB0aHJlYWRzLCBwdGhyZWFkX2NyZWF0ZSkKLWZpCi0KLWRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcwotQUNfQ0hFQ0tfSEVBREVSUyhpbnR0eXBlcy5oKQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubzsgdGhlbgotSEFWRV9JTlRUWVBFU19IPTAKLWVsc2UKLUhBVkVfSU5UVFlQRVNfSD0xCi1maQotQUNfU1VCU1QoSEFWRV9JTlRUWVBFU19IKQorZG5sIEFDX0NIRUNLX0xJQihwdGhyZWFkLCBwdGhyZWFkX2NyZWF0ZSkKK2RubCBpZiB0ZXN0ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2NyZWF0ZSA9IG5vOyB0aGVuCitkbmwgQUNfQ0hFQ0tfTElCKHB0aHJlYWRzLCBwdGhyZWFkX2NyZWF0ZSkKK2RubCBmaQorZG5sCiAKIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzCiBBQ19DSEVDS19UWVBFKFhNTEJ5dGUsdW5zaWduZWQgY2hhcikKQEAgLTM2LDYgKzMxLDcgQEAKIGNhc2UgIiR7aG9zdH0iIGluCiAgICAgICAgICotKi1zb2xhcmlzKikgICBwbGF0Zm9ybT1TT0xBUklTIDs7CiAgICAgICAgICotKi1saW51eCopICAgICBwbGF0Zm9ybT1MSU5VWCA7OworICAgICAgICAqLSotaXJpeCopICAgICAgcGxhdGZvcm09SVJJWCA7OwogICAgICAgICAqLSotYWl4KikgICAgICAgcGxhdGZvcm09QUlYIDs7CiAgICAgICAgICotKi1ocCopICAgICAgICBwbGF0Zm9ybT1IUFVYIDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7aG9zdH0iIGluCkBAIC00OCwxMiArNDQsMTMgQEAKIGVzYWMKIEFDX1NVQlNUKHBsYXRmb3JtKQogCi1jb21waWxlcj0ke0NYWH0KLUFDX1NVQlNUKGNvbXBpbGVyKQorY3h4PSR7Q1hYfQorQUNfU1VCU1QoY3h4KQogCi0jIHByZWZpeD0ke3ByZWZpeH0KK2NjPSR7Q0N9CitBQ19TVUJTVChjYykKKwogQUNfU1VCU1QocHJlZml4KQotCiBBQ19TVUJTVChvc3ZlcikKIAogY3h4ZmxhZ3M9JHtDWFhGTEFHU30KZGlmZiAtLWdpdCBhL3NyYy9kb20vQXR0ckltcGwuY3BwIGIvc3JjL2RvbS9BdHRySW1wbC5jcHAKaW5kZXggOGM2NTU3My4uYzA1YTZhYyAxMDA2NDQKLS0tIGEvc3JjL2RvbS9BdHRySW1wbC5jcHAKKysrIGIvc3JjL2RvbS9BdHRySW1wbC5jcHAKQEAgLTU3LDggKzU3LDEzIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODozOSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjE6MTY6MjQgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjM5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoxMCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTE3MSw4ICsxNzYsMTIgQEAKIHZvaWQgQXR0ckltcGw6OnNldFZhbHVlKGNvbnN0IERPTVN0cmluZyAmdmFsKQogewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCi0gICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CisgICAgeworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uCisgICAgICAgICgKKyAgICAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbAorICAgICAgICApOworICAgIH0KICAgICAKICAgICBOb2RlSW1wbCAqa2lkOwogICAgIHdoaWxlICgoa2lkID0gZ2V0Rmlyc3RDaGlsZCgpKSAhPSBudWxsKSAgICAgICAgIC8vIFJlbW92ZSBleGlzdGluZyBraWRzCmRpZmYgLS1naXQgYS9zcmMvZG9tL0NoYXJhY3RlckRhdGFJbXBsLmNwcCBiL3NyYy9kb20vQ2hhcmFjdGVyRGF0YUltcGwuY3BwCmluZGV4IGZkMzA5ZWUuLjBhYmVlZjIgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vQ2hhcmFjdGVyRGF0YUltcGwuY3BwCisrKyBiL3NyYy9kb20vQ2hhcmFjdGVyRGF0YUltcGwuY3BwCkBAIC01Niw4ICs1NiwyMCBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDEgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzAzIDAwOjExOjIyICBhbmR5aAorICogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyAqIHdoZXJlIHRoZXkgaGFkIGJlZW4gbWlzc2VkLgorICoKKyAqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorICogYmVpbmcgbnVsbCB0ZXJtaW5hdGVkLgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNCAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjExICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODgsNyArMTAwLDcgQEAKIHZvaWQgQ2hhcmFjdGVyRGF0YUltcGw6OmFwcGVuZERhdGEoY29uc3QgRE9NU3RyaW5nICZkYXRhKQogewogICAgIGlmKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKICAgICAKICAgICB2YWx1ZS5hcHBlbmREYXRhKGRhdGEpOwpAQCAtMTA0LDEwICsxMTYsMTAgQEAKIHZvaWQgQ2hhcmFjdGVyRGF0YUltcGw6OmRlbGV0ZURhdGEoaW50IG9mZnNldCwgaW50IGNvdW50KQogewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlIsIG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSLCBudWxsKTsKICAgICAKICAgICAKICAgICAvL2ludCB0YWlsTGVuZ3RoID0gTWF0aC5tYXgodmFsdWUubGVuZ3RoKCkgLSBjb3VudCAtIG9mZnNldCwgMCk7CkBAIC0xMTcsMjEgKzEyOSwyMCBAQAogICAgIC8vfQogICAgIC8vY2F0Y2ggKFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkKICAgICAvL3sKLSAgICAvLyAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUiwgbnVsbCk7CisgICAgLy8gICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgaW50IGxlbiA9IHZhbHVlLmxlbmd0aCgpOwogICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSBsZW4pCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgdmFsdWUuZGVsZXRlRGF0YShvZmZzZXQsIGNvdW50KTsKIH07CiAKIAogCi1ET01TdHJpbmcgQ2hhcmFjdGVyRGF0YUltcGw6OmdldERhdGEoKQorRE9NU3RyaW5nICZDaGFyYWN0ZXJEYXRhSW1wbDo6Z2V0RGF0YSgpCiB7Ci0gICAgcmV0dXJuIHZhbHVlLmNsb25lKCk7ICAgICAgICAvLyBjbG9uZSBoZXJlIHNvIHRoYXQgc3Vic2VxdWVudCBjaGFuZ2VzIHRvCi0gICAgLy8gIG91ciB2YWx1ZSB3aWxsIG5vdCBjaGFuZ2UgdGhlIHJldHVybmVkIHN0cmluZy4KKyAgICByZXR1cm4gdmFsdWU7IAogfTsKIAogCkBAIC0xNTYsMTEgKzE2NywxMSBAQAogewogICAgIAogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgaWYgKG9mZnNldDwwIHx8IG9mZnNldD52YWx1ZS5sZW5ndGgoKSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlIsIG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSLCBudWxsKTsKICAgICAKICAgICB2YWx1ZS5pbnNlcnREYXRhKG9mZnNldCwgZGF0YSk7CiB9CkBAIC0xNzAsNyArMTgxLDcgQEAKIHZvaWQgQ2hhcmFjdGVyRGF0YUltcGw6OnJlcGxhY2VEYXRhKGludCBvZmZzZXQsIGludCBjb3VudCwgY29uc3QgRE9NU3RyaW5nICZkYXRhKQogewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgZGVsZXRlRGF0YShvZmZzZXQsIGNvdW50KTsKICAgICBpbnNlcnREYXRhKG9mZnNldCwgZGF0YSk7CkBAIC0xODIsNyArMTkzLDcgQEAKIHZvaWQgQ2hhcmFjdGVyRGF0YUltcGw6OnNldERhdGEoY29uc3QgRE9NU3RyaW5nICZhcmcpCiB7CiAgICAgaWYgKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgdmFsdWUgPSBhcmcuY2xvbmUoKTsKIH07CiAKQEAgLTE5NCw3ICsyMDUsNyBAQAogewogICAgIAogICAgIGlmKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+IHZhbHVlLmxlbmd0aCgpLTEpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSLG51bGwpOwogICAgIAogICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmdEYXRhKG9mZnNldCwgY291bnQpOwogfTsKZGlmZiAtLWdpdCBhL3NyYy9kb20vQ2hhcmFjdGVyRGF0YUltcGwuaHBwIGIvc3JjL2RvbS9DaGFyYWN0ZXJEYXRhSW1wbC5ocHAKaW5kZXggMzlkYmQ5MC4uODFhOWU2YyAxMDA2NDQKLS0tIGEvc3JjL2RvbS9DaGFyYWN0ZXJEYXRhSW1wbC5ocHAKKysrIGIvc3JjL2RvbS9DaGFyYWN0ZXJEYXRhSW1wbC5ocHAKQEAgLTU5LDggKzU5LDE1IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODo0MSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MTE6MjIgIGFuZHloCisgKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorICogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisgKgorICogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisgKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo0MSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MTEgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC05MSw3ICs5OCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZERhdGEoY29uc3QgRE9NU3RyaW5nICZkYXRhKTsKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YShpbnQgb2Zmc2V0LCBpbnQgY291bnQpOwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIGdldERhdGEoKTsKKyAgICB2aXJ0dWFsIERPTVN0cmluZyAmZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgaW50IGdldENoYXJEYXRhTGVuZ3RoKCk7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydERhdGEoaW50IG9mZnNldCwgY29uc3QgRE9NU3RyaW5nICZkYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwbGFjZURhdGEoaW50IG9mZnNldCwgaW50IGNvdW50LCBjb25zdCBET01TdHJpbmcgJmRhdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9ET01TdHJpbmcuY3BwIGIvc3JjL2RvbS9ET01TdHJpbmcuY3BwCmluZGV4IDczMjU0MzYuLjdlZWI0OTAgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vRE9NU3RyaW5nLmNwcAorKysgYi9zcmMvZG9tL0RPTVN0cmluZy5jcHAKQEAgLTU2LDggKzU2LDIwIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODo0NyAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMDMgMDA6MTE6MjIgIGFuZHloCisgKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorICogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisgKgorICogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisgKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo0NyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6MTIgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC03OTcsMTMgKzgwOSw3NSBAQAogICAgIGlmIChmSGFuZGxlKQogICAgIHsKICAgICAgICAgcmV0UCA9IGZIYW5kbGUtPmZEU0RhdGEtPmZEYXRhOwotICAgICAgICByZXRQW2ZIYW5kbGUtPmZMZW5ndGhdID0gMDsKICAgICB9CiAgICAgcmV0dXJuIHJldFA7CiB9OwogCiAKLWludCBET01TdHJpbmc6OnN0cmNtcChjb25zdCBET01TdHJpbmcgJm90aGVyKSBjb25zdAorY2hhciAqRE9NU3RyaW5nOjp0cmFuc2NvZGUoKSBjb25zdAoreworICAgIGlmICghZkhhbmRsZSB8fCBmSGFuZGxlLT5mTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBjaGFyKiByZXRQID0gbmV3IGNoYXJbMV07CisgICAgICAgICpyZXRQID0gMDsKKyAgICAgICAgcmV0dXJuIHJldFA7CisgICAgfQorCisgICAgLy8gV2UndmUgZ290IHNvbWUgZGF0YQorICAgIC8vIERPTVN0cmluZ3MgYXJlIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkLCBzbyB3ZSBtYXkgbmVlZCB0bworICAgIC8vIGNvcHkgdG8gYW5vdGhlciBidWZmZXIgZmlyc3QgaW4gb3JkZXIgdG8gbnVsbCB0ZXJtaW5hdGUgaXQgZm9yCisgICAgLy8gdXNlIGFzIGlucHV0IHRvIHRoZSB0cmFuc2NvZGluZyByb3V0aW5lcy4uCisgICAgLy8KKyAgICBYTUxDaCogRE9NU3RyRGF0YSA9IGZIYW5kbGUtPmZEU0RhdGEtPmZEYXRhOworCisgICAgY29uc3QgaW50IGxvY2FsQnVmTGVuID0gMTAwMDsKKyAgICBYTUxDaCBsb2NhbEJ1Zltsb2NhbEJ1Zkxlbl07CisgICAgWE1MQ2ggKmFsbG9jYXRlZEJ1ZiA9IDA7CisgICAgWE1MQ2ggKnNyY1A7CisKKyAgICBpZiAoRE9NU3RyRGF0YVtmSGFuZGxlLT5mTGVuZ3RoXSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIERPTVN0cmluZyBpdHNlbGYgaGFwcGVucyB0byBiZSBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgIC8vICBKdXN0IHVzZSBpdCBpbiBwbGFjZS4KKyAgICAgICAgc3JjUCA9IERPTVN0ckRhdGE7CisgICAgfSAKKyAgICBlbHNlIGlmIChmSGFuZGxlLT5mTGVuZ3RoIDwgbG9jYWxCdWZMZW4tMSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBkYXRhIGlzIG5vdCBudWxsIHRlcm1pbmF0ZWQsIGJ1dCBkb2VzIGZpdCBpbiB0aGUKKyAgICAgICAgLy8gIGxvY2FsIGJ1ZmZlciAoZmFzdCBhbGxvY2F0aW9uKS4gIENvcHkgaXQgb3ZlciwgYW5kIGFkZCAKKyAgICAgICAgLy8gIHRoZSBudWxsIHRlcm1pbmF0aW9uLAorICAgICAgICBtZW1jcHkobG9jYWxCdWYsIERPTVN0ckRhdGEsIGZIYW5kbGUtPmZMZW5ndGggKiBzaXplb2YoWE1MQ2gpKTsKKyAgICAgICAgc3JjUCA9IGxvY2FsQnVmOworICAgICAgICBzcmNQW2ZIYW5kbGUtPmZMZW5ndGhdID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhlIGRhdGEgaXMgdG9vIGJpZyBmb3IgdGhlIGxvY2FsIGJ1ZmZlci4gIEhlYXAgYWxsb2NhdGUgb25lLgorICAgICAgICBhbGxvY2F0ZWRCdWYgPSBzcmNQID0gbmV3IFhNTENoW2ZIYW5kbGUtPmZMZW5ndGggKyAxXTsKKyAgICAgICAgbWVtY3B5KGFsbG9jYXRlZEJ1ZiwgRE9NU3RyRGF0YSwgZkhhbmRsZS0+Zkxlbmd0aCAqIHNpemVvZihYTUxDaCkpOworICAgICAgICBzcmNQW2ZIYW5kbGUtPmZMZW5ndGhdID0gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vICBGaW5kIG91dCBob3cgbWFueSBvdXRwdXQgY2hhcnMgd2UgbmVlZCBhbmQgYWxsb2NhdGUgYSBidWZmZXIgYmlnIGVub3VnaAorICAgIC8vICBmb3IgdGhhdCBwbHVzIGEgbnVsbC4KKyAgICAvLworICAgIGNvbnN0IHVuc2lnbmVkIGludCBjaGFyc05lZWRlZCA9IGdldERvbUNvbnZlcnRlcigpLT5jYWxjUmVxdWlyZWRTaXplKHNyY1ApOworICAgIGNoYXIqIHJldFAgPSBuZXcgY2hhcltjaGFyc05lZWRlZCArIDFdOworCisgICAgaWYgKCFnZXREb21Db252ZXJ0ZXIoKS0+dHJhbnNjb2RlKHNyY1AsIHJldFAsIGNoYXJzTmVlZGVkKSkKKyAgICB7CisgICAgICAgIC8vIDxUQkQ+IFdlIHNob3VsZCB0aHJvdyBzb21ldGhpbmcgaGVyZT8KKyAgICB9CisgICAgZGVsZXRlIFtdIGFsbG9jYXRlZEJ1ZjsgICAvLyB3aGljaCB3aWxsIGJlIG51bGwgaWYgd2UgZGlkbid0IGFsbG9jYXRlIG9uZS4KKworICAgIC8vIENhcCBpdCBvZmYgYW5kIHJldHVybiBpdAorICAgIHJldFBbY2hhcnNOZWVkZWRdID0gMDsKKyAgICByZXR1cm4gcmV0UDsKK30KKworCitpbnQgRE9NU3RyaW5nOjpjb21wYXJlU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmb3RoZXIpIGNvbnN0CiB7CiAgICAgLy8gTm90ZTogdGhpcyBzdHJjbXAgZG9lcyBub3QgbWF0Y2ggdGhlIHNlbWFudGljcwogICAgIC8vICAgICAgIG9mIHRoZSBzdGFuZGFyZCBDIHN0cmNtcC4gIEFsbCBpdCBuZWVkcyB0byBkbyBpcwpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9ET01TdHJpbmcuaHBwIGIvc3JjL2RvbS9ET01TdHJpbmcuaHBwCmluZGV4IDVjNDY0MTMuLjZmNTZjZDQgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vRE9NU3RyaW5nLmhwcAorKysgYi9zcmMvZG9tL0RPTVN0cmluZy5ocHAKQEAgLTU2LDggKzU2LDIwIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODo0OCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMDMgMDA6MTE6MjIgIGFuZHloCisgKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorICogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisgKgorICogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisgKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo0OCAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MTIgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0yNjAsMTAgKzI3MiwyMiBAQAogICAgICAgKiBSZXR1cm5zIGEgaGFuZGxlIHRvIHRoZSByYXcgYnVmZmVyIGluIHRoZSA8Y29kZT5ET01TdHJpbmc8L2NvZGU+LgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIFRoZSBwb2ludGVyIGluc2lkZSB0aGUgPGNvZGU+RE9NU3RyaW5nPC9jb2RlPiBjb250YWluZyB0aGUgc3RyaW5nIGRhdGEuCisgICAgICAqICAgICAgICAgTm90ZTogdGhlIGRhdGEgaXMgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQuICBEbyBub3QgcmVseSBvbgorICAgICAgKiAgICAgICAgIGEgbnVsbCBiZWluZyB0aGVyZSwgYW5kIGRvIG5vdCBhZGQgb25lLCBhcyBzZXZlcmFsIERPTVN0cmluZ3MKKyAgICAgICogICAgICAgICB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIG1heSBzaGFyZSB0aGUgc2FtZSByYXcgYnVmZmVyLgogICAgICAgKi8KICAgICBYTUxDaCAgICAgICAqcmF3QnVmZmVyKCkgY29uc3Q7CiAKICAgICAvKioKKyAgICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZywgdHJhbnNjb2RlZCB0byB0aGUgbG9jYWwgY29kZSBwYWdlLiBUaGUKKyAgICAgICogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGlzIGJ1ZmZlci4KKyAgICAgICoKKyAgICAgICogQHJldHVybiBBIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIG9mIGNoYXIgZWxlbWVudHMsIHdoaWNoCisgICAgICAqICAgICAgICAgcmVwcmVzZW50cyB0aGUgb3JpZ2luYWwgc3RyaW5nLCBidXQgaW4gdGhlIGxvY2FsIGVuY29kaW5nLgorICAgICAgKi8KKyAgICBjaGFyICAgICAgICAqdHJhbnNjb2RlKCkgY29uc3Q7CisKKyAgICAvKioKICAgICAgICogUmV0dXJucyBhIHN1Yi1zdHJpbmcgb2YgdGhlIDxjb2RlPkRPTVN0cmluZzwvY29kZT4gc3RhcnRpbmcgYXQgYSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBvZmZzZXQgVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgZnJvbSB3aGljaCB0aGUgc3ViLXN0cmluZyBpcyBiZWluZyByZXF1ZXN0ZWQuCkBAIC0zMTMsNyArMzM3LDcgQEAKICAgICAvKioKICAgICAgICogQ29tcGFyZXMgYSBET01TdHJpbmcgd2l0aCBhbm90aGVyLgogICAgICAgKgotICAgICAgKiBUaGlzIHN0cmNtcCBkb2VzIG5vdCBtYXRjaCB0aGUgc2VtYW50aWNzIG9mIHRoZSBzdGFuZGFyZCBDIHN0cmNtcC4gIAorICAgICAgKiBUaGlzIGNvbXBhcmVTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHNlbWFudGljcyBvZiB0aGUgc3RhbmRhcmQgQyBzdHJjbXAuICAKICAgICAgICogQWxsIGl0IG5lZWRzIHRvIGRvIGlzIGRlZmluZSBzb21lIGxlc3MgdGhhbiAtIGVxdWFscyAtIGdyZWF0ZXIgdGhhbiAKICAgICAgICogb3JkZXJpbmcgb2Ygc3RyaW5ncy4gIEhvdyBkb2Vzbid0IG1hdHRlci4KICAgICAgICoKQEAgLTMyMSw3ICszNDUsNyBAQAogICAgICAgKiBAcGFyYW0gb3RoZXIgVGhlIG9iamVjdCB0byBiZSBjb21wYXJlZCB3aXRoCiAgICAgICAqIEByZXR1cm4gRWl0aGVyIC0xLCAwLCBvciAxIGJhc2VkIG9uIHRoZSBjb21wYXJpc29uLiAKICAgICAgICovCi0gICAgaW50ICAgICAgICAgc3RyY21wKGNvbnN0IERPTVN0cmluZyAmb3RoZXIpIGNvbnN0OworICAgIGludCAgICAgICAgIGNvbXBhcmVTdHJpbmcoY29uc3QgRE9NU3RyaW5nICZvdGhlcikgY29uc3Q7CiAKICAgICAvKioKICAgICAgICogVGVsbHMgaWYgYSA8Y29kZT5ET01TdHJpbmc8L2NvZGU+IGNvbnRhaW5zIHRoZSBzYW1lIGNoYXJhY3RlciBkYXRhCmRpZmYgLS1naXQgYS9zcmMvZG9tL0RPTV9BdHRyLmNwcCBiL3NyYy9kb20vRE9NX0F0dHIuY3BwCmluZGV4IDY2NTUxZGMuLmVhM2M0ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vRE9NX0F0dHIuY3BwCisrKyBiL3NyYy9kb20vRE9NX0F0dHIuY3BwCkBAIC01Niw4ICs1NiwxNSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDggIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjExOjIyICBhbmR5aAorICogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyAqIHdoZXJlIHRoZXkgaGFkIGJlZW4gbWlzc2VkLgorICoKKyAqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorICogYmVpbmcgbnVsbCB0ZXJtaW5hdGVkLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDggIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjEyICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTA2LDMwICsxMTMsMzQgQEAKIAogRE9NU3RyaW5nICAgICAgIERPTV9BdHRyOjpnZXROYW1lKCkgY29uc3QKIHsKLSAgICAgICAgcmV0dXJuICgoQXR0ckltcGwgKilmSW1wbCktPmdldE5hbWUoKTsKKyAgICByZXR1cm4gKChBdHRySW1wbCAqKWZJbXBsKS0+Z2V0TmFtZSgpLmNsb25lKCk7CiB9OwogCiAKLWJvb2wgICAgICAgICAgICBET01fQXR0cjo6Z2V0U3BlY2lmaWVkKCkgY29uc3QKK2Jvb2wgICAgICAgRE9NX0F0dHI6OmdldFNwZWNpZmllZCgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKEF0dHJJbXBsICopZkltcGwpLT5nZXRTcGVjaWZpZWQoKTsKKyAgICByZXR1cm4gKChBdHRySW1wbCAqKWZJbXBsKS0+Z2V0U3BlY2lmaWVkKCk7CiB9OwogCiAKLURPTVN0cmluZyAgICAgICBET01fQXR0cjo6Z2V0VmFsdWUoKSBjb25zdAorRE9NU3RyaW5nICAgRE9NX0F0dHI6OmdldFZhbHVlKCkgY29uc3QKIHsKLSAgICAgICAgcmV0dXJuICgoQXR0ckltcGwgKilmSW1wbCktPmdldFZhbHVlKCk7CisgICAgLy8gVGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGNsb25lZCBiZWZvcmUKKyAgICAvLyAgcmV0dXJuaW5nLCBiZWNhdXNlIGl0IGlzIGNvbXB1dGVkIGR5bmFtaWNhbGx5IGZyb20gdGhlCisgICAgLy8gIGNoaWxkcmVuIG9mIHRoZSBhdHRyaWJ1dGUuCisgICAgLy8KKyAgICByZXR1cm4gKChBdHRySW1wbCAqKWZJbXBsKS0+Z2V0VmFsdWUoKTsKIH07CiAKIAotdm9pZCAgICAgICAgICAgICAgICAgICAgRE9NX0F0dHI6OnNldFNwZWNpZmllZChib29sIHNwZWNpZmllZCkKK3ZvaWQgICAgICBET01fQXR0cjo6c2V0U3BlY2lmaWVkKGJvb2wgc3BlY2lmaWVkKQogewotICAgICAgICAoKEF0dHJJbXBsICopZkltcGwpLT5zZXRTcGVjaWZpZWQoc3BlY2lmaWVkKTsKKyAgICAoKEF0dHJJbXBsICopZkltcGwpLT5zZXRTcGVjaWZpZWQoc3BlY2lmaWVkKTsKIH07CiAKIAotdm9pZCAgICAgICAgICAgIERPTV9BdHRyOjpzZXRWYWx1ZShjb25zdCBET01TdHJpbmcgJnZhbHVlKSB7Ci0gICAgICAgICgoQXR0ckltcGwgKilmSW1wbCktPnNldFZhbHVlKHZhbHVlKTsKK3ZvaWQgICAgIERPTV9BdHRyOjpzZXRWYWx1ZShjb25zdCBET01TdHJpbmcgJnZhbHVlKSB7CisgICAgKChBdHRySW1wbCAqKWZJbXBsKS0+c2V0VmFsdWUodmFsdWUpOwogfTsKIAogCkBAIC0xMzcsNSArMTQ4LDUgQEAKIAogRE9NX0VsZW1lbnQgICAgIERPTV9BdHRyOjpnZXRPd25lckVsZW1lbnQoKSBjb25zdAogewotICAgICAgICByZXR1cm4gRE9NX0VsZW1lbnQoKChBdHRySW1wbCAqKWZJbXBsKS0+Z2V0T3duZXJFbGVtZW50KCkpOworICAgIHJldHVybiBET01fRWxlbWVudCgoKEF0dHJJbXBsICopZkltcGwpLT5nZXRPd25lckVsZW1lbnQoKSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvZG9tL0RPTV9DaGFyYWN0ZXJEYXRhLmNwcCBiL3NyYy9kb20vRE9NX0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDZmM2U4YTIuLjMxODA3YjMgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vRE9NX0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL3NyYy9kb20vRE9NX0NoYXJhY3RlckRhdGEuY3BwCkBAIC01Niw4ICs1NiwxNSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDkgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjExOjIyICBhbmR5aAorICogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyAqIHdoZXJlIHRoZXkgaGFkIGJlZW4gbWlzc2VkLgorICoKKyAqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorICogYmVpbmcgbnVsbCB0ZXJtaW5hdGVkLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDkgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjEzICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTAxLDcgKzEwOCw3IEBACiAKIERPTVN0cmluZyBET01fQ2hhcmFjdGVyRGF0YTo6Z2V0RGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICgoQ2hhcmFjdGVyRGF0YUltcGwgKilmSW1wbCktPmdldERhdGEoKTsKKyAgICByZXR1cm4gKChDaGFyYWN0ZXJEYXRhSW1wbCAqKWZJbXBsKS0+Z2V0RGF0YSgpLmNsb25lKCk7CiB9OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9kb20vRE9NX0RPTUltcGxlbWVudGF0aW9uLmNwcCBiL3NyYy9kb20vRE9NX0RPTUltcGxlbWVudGF0aW9uLmNwcAppbmRleCBlM2EzOTg4Li5kMjk1ZGU0IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9ET01JbXBsZW1lbnRhdGlvbi5jcHAKKysrIGIvc3JjL2RvbS9ET01fRE9NSW1wbGVtZW50YXRpb24uY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NTYgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo1NiAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6MTUgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xNTUsNyArMTYwLDcgQEAKIAljb25zdCBET01TdHJpbmcgJmludGVybmFsU3Vic2V0KQogewogICAgIGlmICghRG9jdW1lbnRJbXBsOjppc1hNTE5hbWUocXVhbGlmaWVkTmFtZSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsIG51bGwpOwogICAgIAogICAgIHJldHVybiBET01fRG9jdW1lbnRUeXBlKG5ldyBEb2N1bWVudFR5cGVJbXBsKHF1YWxpZmllZE5hbWUsIHB1YmxpY0lELCBzeXN0ZW1JRCwgaW50ZXJuYWxTdWJzZXQpKTsKZGlmZiAtLWdpdCBhL3NyYy9kb20vRE9NX0RvY3VtZW50LmNwcCBiL3NyYy9kb20vRE9NX0RvY3VtZW50LmNwcAppbmRleCAwMzcwN2UyLi5mYzAwZjUxIDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9Eb2N1bWVudC5jcHAKKysrIGIvc3JjL2RvbS9ET01fRG9jdW1lbnQuY3BwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NTAgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAxOjQ4OjE0ICByYWh1bGoKKyAqIENoYW5nZWQgMEwgdG8gMC4gQ0MgdW5kZXIgSFBVWCBpcyBoYXBweSBub3cuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo1MCAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDQ6MTUgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0yMDMsMzIgKzIwNiwzMiBAQAogfTsKIAogCi1ET01fVHJlZVdhbGtlciAgICAgICAgIERPTV9Eb2N1bWVudDo6Y3JlYXRlVHJlZVdhbGtlcihET01fTm9kZSByb290LCBzaG9ydCB3aGF0VG9TaG93LCBET01fTm9kZUZpbHRlciBmaWx0ZXIpIHsKLSAgICAgICAgcmV0dXJuIERPTV9UcmVlV2Fsa2VyKERvY3VtZW50SW1wbDo6Y3JlYXRlVHJlZVdhbGtlcihyb290LCB3aGF0VG9TaG93LCBmaWx0ZXIsIDBMKSk7CitET01fVHJlZVdhbGtlciBET01fRG9jdW1lbnQ6OmNyZWF0ZVRyZWVXYWxrZXIoRE9NX05vZGUgcm9vdCwgc2hvcnQgd2hhdFRvU2hvdywgRE9NX05vZGVGaWx0ZXIgZmlsdGVyKSB7CisJcmV0dXJuIERPTV9UcmVlV2Fsa2VyKERvY3VtZW50SW1wbDo6Y3JlYXRlVHJlZVdhbGtlcihyb290LCB3aGF0VG9TaG93LCBmaWx0ZXIsIDBMKSk7CiB9OwogCiAKLURPTV9Ob2RlSXRlcmF0b3IgICAgICAgRE9NX0RvY3VtZW50OjpjcmVhdGVOb2RlSXRlcmF0b3IoRE9NX05vZGUgcm9vdCwgc2hvcnQgd2hhdFRvU2hvdywgTm9kZUZpbHRlckltcGwqIGZpbHRlclRoYXRXaWxsQmVBZG9wdGVkKSB7Ci0gICAgICAgIHJldHVybiBET01fTm9kZUl0ZXJhdG9yKERvY3VtZW50SW1wbDo6Y3JlYXRlTm9kZUl0ZXJhdG9yKHJvb3QsIHdoYXRUb1Nob3csIDBMLCBmaWx0ZXJUaGF0V2lsbEJlQWRvcHRlZCkpOworRE9NX05vZGVJdGVyYXRvciBET01fRG9jdW1lbnQ6OmNyZWF0ZU5vZGVJdGVyYXRvcihET01fTm9kZSByb290LCBzaG9ydCB3aGF0VG9TaG93LCBOb2RlRmlsdGVySW1wbCogZmlsdGVyVGhhdFdpbGxCZUFkb3B0ZWQpIHsKKwlyZXR1cm4gRE9NX05vZGVJdGVyYXRvcihEb2N1bWVudEltcGw6OmNyZWF0ZU5vZGVJdGVyYXRvcihyb290LCB3aGF0VG9TaG93LCAwLCBmaWx0ZXJUaGF0V2lsbEJlQWRvcHRlZCkpOwogfTsKIAogCi1ET01fVHJlZVdhbGtlciAgICAgICAgIERPTV9Eb2N1bWVudDo6Y3JlYXRlVHJlZVdhbGtlcihET01fTm9kZSByb290LCBzaG9ydCB3aGF0VG9TaG93LCBOb2RlRmlsdGVySW1wbCogZmlsdGVyVGhhdFdpbGxCZUFkb3B0ZWQpIHsKLSAgICAgICAgcmV0dXJuIERPTV9UcmVlV2Fsa2VyKERvY3VtZW50SW1wbDo6Y3JlYXRlVHJlZVdhbGtlcihyb290LCB3aGF0VG9TaG93LCAwTCwgZmlsdGVyVGhhdFdpbGxCZUFkb3B0ZWQpKTsKK0RPTV9UcmVlV2Fsa2VyIERPTV9Eb2N1bWVudDo6Y3JlYXRlVHJlZVdhbGtlcihET01fTm9kZSByb290LCBzaG9ydCB3aGF0VG9TaG93LCBOb2RlRmlsdGVySW1wbCogZmlsdGVyVGhhdFdpbGxCZUFkb3B0ZWQpIHsKKwlyZXR1cm4gRE9NX1RyZWVXYWxrZXIoRG9jdW1lbnRJbXBsOjpjcmVhdGVUcmVlV2Fsa2VyKHJvb3QsIHdoYXRUb1Nob3csIDAsIGZpbHRlclRoYXRXaWxsQmVBZG9wdGVkKSk7CiB9OwogCiAKIAotRE9NX05vZGVMaXN0ICAgICAgICAgICBET01fRG9jdW1lbnQ6OmdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IERPTVN0cmluZyAmdGFnbmFtZSkgY29uc3QgIHsKLSAgICAgICAgcmV0dXJuIERPTV9Ob2RlTGlzdCgoKERvY3VtZW50SW1wbCAqKWZJbXBsKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUodGFnbmFtZSkpOworRE9NX05vZGVMaXN0IERPTV9Eb2N1bWVudDo6Z2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgRE9NU3RyaW5nICZ0YWduYW1lKSBjb25zdCAgeworCXJldHVybiBET01fTm9kZUxpc3QoKChEb2N1bWVudEltcGwgKilmSW1wbCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ25hbWUpKTsKIH07CiAKIAogLy9JbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCiAKLURPTV9Ob2RlICAgICAgICAgICAgICAgRE9NX0RvY3VtZW50OjppbXBvcnROb2RlKGNvbnN0IERPTV9Ob2RlICZzb3VyY2UsIGJvb2wgZGVlcCkKK0RPTV9Ob2RlIERPTV9Eb2N1bWVudDo6aW1wb3J0Tm9kZShjb25zdCBET01fTm9kZSAmc291cmNlLCBib29sIGRlZXApCiB7Ci0gICAgICAgIHJldHVybiBET01fTm9kZSgoKERvY3VtZW50SW1wbCAqKWZJbXBsKS0+aW1wb3J0Tm9kZShzb3VyY2UuZkltcGwsIGRlZXApKTsKKwlyZXR1cm4gRE9NX05vZGUoKChEb2N1bWVudEltcGwgKilmSW1wbCktPmltcG9ydE5vZGUoc291cmNlLmZJbXBsLCBkZWVwKSk7CiB9OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9kb20vRE9NX0RvY3VtZW50VHlwZS5jcHAgYi9zcmMvZG9tL0RPTV9Eb2N1bWVudFR5cGUuY3BwCmluZGV4IDYzZTQ4NjguLmRhMTVhOTcgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vRE9NX0RvY3VtZW50VHlwZS5jcHAKKysrIGIvc3JjL2RvbS9ET01fRG9jdW1lbnRUeXBlLmNwcApAQCAtNTYsOCArNTYsMTUgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjUyICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMyAwMDoxMToyMyAgYW5keWgKKyAqIEFkZGVkIERPTVN0cmluZy5jbG9uZSgpIHRvIG5vZGUgcGFyYW1ldGVycyBpbiBhbmQgb3V0IG9mIHRoZSBET00sCisgKiB3aGVyZSB0aGV5IGhhZCBiZWVuIG1pc3NlZC4KKyAqCisgKiBET01TdHJpbmc6OnJhd0J1ZmZlciwgcmVtb3ZlZCBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgaXQKKyAqIGJlaW5nIG51bGwgdGVybWluYXRlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjUyICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoxNiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEwNyw3ICsxMTQsNyBAQAogCiBET01TdHJpbmcgICAgICAgRE9NX0RvY3VtZW50VHlwZTo6Z2V0TmFtZSgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKERvY3VtZW50VHlwZUltcGwgKilmSW1wbCktPmdldE5hbWUoKTsKKyAgICAgICAgcmV0dXJuICgoRG9jdW1lbnRUeXBlSW1wbCAqKWZJbXBsKS0+Z2V0TmFtZSgpLmNsb25lKCk7CiB9OwogCiAKQEAgLTEyOSwxNyArMTM2LDE3IEBACiAKIERPTVN0cmluZyAgICAgRE9NX0RvY3VtZW50VHlwZTo6Z2V0UHVibGljSUQoKSBjb25zdAogewotICAgICAgICByZXR1cm4gKChEb2N1bWVudFR5cGVJbXBsICopZkltcGwpLT5nZXRQdWJsaWNJRCgpOworICAgICAgICByZXR1cm4gKChEb2N1bWVudFR5cGVJbXBsICopZkltcGwpLT5nZXRQdWJsaWNJRCgpLmNsb25lKCk7CiB9CiAKIAogRE9NU3RyaW5nICAgICBET01fRG9jdW1lbnRUeXBlOjpnZXRTeXN0ZW1JRCgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKERvY3VtZW50VHlwZUltcGwgKilmSW1wbCktPmdldFN5c3RlbUlEKCk7CisgICAgICAgIHJldHVybiAoKERvY3VtZW50VHlwZUltcGwgKilmSW1wbCktPmdldFN5c3RlbUlEKCkuY2xvbmUoKTsKIH0KIAogCiBET01TdHJpbmcgICAgIERPTV9Eb2N1bWVudFR5cGU6OmdldEludGVybmFsU3Vic2V0KCkgY29uc3QKIHsKLSAgICAgICAgcmV0dXJuICgoRG9jdW1lbnRUeXBlSW1wbCAqKWZJbXBsKS0+Z2V0SW50ZXJuYWxTdWJzZXQoKTsKKyAgICAgICAgcmV0dXJuICgoRG9jdW1lbnRUeXBlSW1wbCAqKWZJbXBsKS0+Z2V0SW50ZXJuYWxTdWJzZXQoKS5jbG9uZSgpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9ET01fRWxlbWVudC5jcHAgYi9zcmMvZG9tL0RPTV9FbGVtZW50LmNwcAppbmRleCA5Yjk1MmY3Li43OGZlNjRkIDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9FbGVtZW50LmNwcAorKysgYi9zcmMvZG9tL0RPTV9FbGVtZW50LmNwcApAQCAtNTYsOCArNTYsMTUgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjU3ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMyAwMDoxMToyMyAgYW5keWgKKyAqIEFkZGVkIERPTVN0cmluZy5jbG9uZSgpIHRvIG5vZGUgcGFyYW1ldGVycyBpbiBhbmQgb3V0IG9mIHRoZSBET00sCisgKiB3aGVyZSB0aGV5IGhhZCBiZWVuIG1pc3NlZC4KKyAqCisgKiBET01TdHJpbmc6OnJhd0J1ZmZlciwgcmVtb3ZlZCBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgaXQKKyAqIGJlaW5nIG51bGwgdGVybWluYXRlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjU3ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoxNyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEwOCwxMyArMTE1LDEzIEBACiAKIERPTVN0cmluZyBET01fRWxlbWVudDo6Z2V0VGFnTmFtZSgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKEVsZW1lbnRJbXBsICopZkltcGwpLT5nZXRUYWdOYW1lKCk7CisgICAgICAgIHJldHVybiAoKEVsZW1lbnRJbXBsICopZkltcGwpLT5nZXRUYWdOYW1lKCkuY2xvbmUoKTsKIH07CiAKIAogRE9NU3RyaW5nIERPTV9FbGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgRE9NU3RyaW5nICZuYW1lKSBjb25zdAogewotICAgICAgICByZXR1cm4gKChFbGVtZW50SW1wbCAqKWZJbXBsKS0+Z2V0QXR0cmlidXRlKG5hbWUpOworICAgICAgICByZXR1cm4gKChFbGVtZW50SW1wbCAqKWZJbXBsKS0+Z2V0QXR0cmlidXRlKG5hbWUpLmNsb25lKCk7CiB9OwogCiAKQEAgLTE3MCw3ICsxNzcsNyBAQAogRE9NU3RyaW5nIERPTV9FbGVtZW50OjpnZXRBdHRyaWJ1dGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwKIAljb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4gKChFbGVtZW50SW1wbCAqKWZJbXBsKS0+Z2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOworICAgIHJldHVybiAoKEVsZW1lbnRJbXBsICopZkltcGwpLT5nZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkuY2xvbmUoKTsKIH0KIAogdm9pZCBET01fRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksCmRpZmYgLS1naXQgYS9zcmMvZG9tL0RPTV9FbnRpdHkuY3BwIGIvc3JjL2RvbS9ET01fRW50aXR5LmNwcAppbmRleCA0MDcyMWI2Li4zYjBkNjk5IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9FbnRpdHkuY3BwCisrKyBiL3NyYy9kb20vRE9NX0VudGl0eS5jcHAKQEAgLTU2LDggKzU2LDE1IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODo1NyAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MTE6MjMgIGFuZHloCisgKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorICogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisgKgorICogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisgKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo1NyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MTcgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMDcsMTggKzExNCwxOCBAQAogCiBET01TdHJpbmcgIERPTV9FbnRpdHk6OmdldFB1YmxpY0lkKCkgY29uc3QKIHsKLSAgICAgICAgcmV0dXJuICgoRW50aXR5SW1wbCAqKWZJbXBsKS0+Z2V0UHVibGljSWQoKTsKKyAgICAgICAgcmV0dXJuICgoRW50aXR5SW1wbCAqKWZJbXBsKS0+Z2V0UHVibGljSWQoKS5jbG9uZSgpOwogfTsKIAogRE9NU3RyaW5nICBET01fRW50aXR5OjpnZXRTeXN0ZW1JZCgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKEVudGl0eUltcGwgKilmSW1wbCktPmdldFN5c3RlbUlkKCk7CisgICAgICAgIHJldHVybiAoKEVudGl0eUltcGwgKilmSW1wbCktPmdldFN5c3RlbUlkKCkuY2xvbmUoKTsKIH07CiAKIAogRE9NU3RyaW5nICBET01fRW50aXR5OjpnZXROb3RhdGlvbk5hbWUoKSBjb25zdAogewotICAgICAgICByZXR1cm4gKChFbnRpdHlJbXBsICopZkltcGwpLT5nZXROb3RhdGlvbk5hbWUoKTsKKyAgICAgICAgcmV0dXJuICgoRW50aXR5SW1wbCAqKWZJbXBsKS0+Z2V0Tm90YXRpb25OYW1lKCkuY2xvbmUoKTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2RvbS9ET01fTm9kZS5jcHAgYi9zcmMvZG9tL0RPTV9Ob2RlLmNwcAppbmRleCBhNTJkZTI3Li43YTkyOTA1IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9Ob2RlLmNwcAorKysgYi9zcmMvZG9tL0RPTV9Ob2RlLmNwcApAQCAtNTYsOCArNTYsMTUgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjU5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMyAwMDoxMToyMyAgYW5keWgKKyAqIEFkZGVkIERPTVN0cmluZy5jbG9uZSgpIHRvIG5vZGUgcGFyYW1ldGVycyBpbiBhbmQgb3V0IG9mIHRoZSBET00sCisgKiB3aGVyZSB0aGV5IGhhZCBiZWVuIG1pc3NlZC4KKyAqCisgKiBET01TdHJpbmc6OnJhd0J1ZmZlciwgcmVtb3ZlZCBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgaXQKKyAqIGJlaW5nIG51bGwgdGVybWluYXRlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjU5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoxOSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTE2MiwxMyArMTY5LDEzIEBACiAKIERPTVN0cmluZyAgRE9NX05vZGU6OmdldE5vZGVOYW1lKCkgIGNvbnN0IAogewotICAgIHJldHVybiBmSW1wbC0+Z2V0Tm9kZU5hbWUoKTsKKyAgICByZXR1cm4gZkltcGwtPmdldE5vZGVOYW1lKCkuY2xvbmUoKTsKIH07CiAKICAgCiBET01TdHJpbmcgIERPTV9Ob2RlOjpnZXROb2RlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBmSW1wbC0+Z2V0Tm9kZVZhbHVlKCk7CisgICAgcmV0dXJuIGZJbXBsLT5nZXROb2RlVmFsdWUoKS5jbG9uZSgpOwogfTsKIAogICAKQEAgLTI4MCwxNyArMjg3LDE3IEBACiAKIERPTVN0cmluZyAgICAgICAgIERPTV9Ob2RlOjpnZXROYW1lc3BhY2VVUkkoKSBjb25zdAogewotICAgIHJldHVybiBmSW1wbC0+Z2V0TmFtZXNwYWNlVVJJKCk7CisgICAgcmV0dXJuIGZJbXBsLT5nZXROYW1lc3BhY2VVUkkoKS5jbG9uZSgpOwogfQogCiBET01TdHJpbmcgICAgICAgICBET01fTm9kZTo6Z2V0UHJlZml4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZkltcGwtPmdldFByZWZpeCgpOworICAgIHJldHVybiBmSW1wbC0+Z2V0UHJlZml4KCkuY2xvbmUoKTsKIH0KIAogRE9NU3RyaW5nICAgICAgICAgRE9NX05vZGU6OmdldExvY2FsTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZJbXBsLT5nZXRMb2NhbE5hbWUoKTsKKyAgICByZXR1cm4gZkltcGwtPmdldExvY2FsTmFtZSgpLmNsb25lKCk7CiB9CiAKIHZvaWQgICAgICAgICAgICAgIERPTV9Ob2RlOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZwcmVmaXgpCmRpZmYgLS1naXQgYS9zcmMvZG9tL0RPTV9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIGIvc3JjL2RvbS9ET01fUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAppbmRleCA5NDVjMGZjLi45ODFjMzYwIDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCisrKyBiL3NyYy9kb20vRE9NX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKQEAgLTU2LDggKzU2LDE1IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTowMyAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MTE6MjMgIGFuZHloCisgKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorICogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisgKgorICogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisgKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOTowMyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MjEgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMTEsMTkgKzExOCwxOSBAQAogCiBET01TdHJpbmcgRE9NX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0VGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICopZkltcGwpLT5nZXRUYXJnZXQoKTsKKyAgICByZXR1cm4gKChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICopZkltcGwpLT5nZXRUYXJnZXQoKS5jbG9uZSgpOwogfTsKIAogCiBET01TdHJpbmcgRE9NX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0RGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICgoUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCAqKWZJbXBsKS0+Z2V0RGF0YSgpOworICAgIHJldHVybiAoKFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKilmSW1wbCktPmdldERhdGEoKS5jbG9uZSgpOwogfTsKIAogCiB2b2lkICAgICAgRE9NX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2V0RGF0YShjb25zdCBET01TdHJpbmcgJmRhdGEpCiB7Ci0gICAgKChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICopZkltcGwpLT5zZXREYXRhKGRhdGEpOworICAgICgoUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCAqKWZJbXBsKS0+c2V0RGF0YShkYXRhLmNsb25lKCkpOwogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvZG9tL0RvY3VtZW50RnJhZ21lbnRJbXBsLmNwcCBiL3NyYy9kb20vRG9jdW1lbnRGcmFnbWVudEltcGwuY3BwCmluZGV4IDFmYjE2YjIuLjFiMGQxYTQgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vRG9jdW1lbnRGcmFnbWVudEltcGwuY3BwCisrKyBiL3NyYy9kb20vRG9jdW1lbnRGcmFnbWVudEltcGwuY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo0MyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MjMgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMDcsNSArMTEyLDUgQEAKIAogdm9pZCBEb2N1bWVudEZyYWdtZW50SW1wbDo6c2V0Tm9kZVZhbHVlKGNvbnN0IERPTVN0cmluZyAmeCkKIHsKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogfTsKZGlmZiAtLWdpdCBhL3NyYy9kb20vRG9jdW1lbnRJbXBsLmNwcCBiL3NyYy9kb20vRG9jdW1lbnRJbXBsLmNwcAppbmRleCAxNjJhNTRiLi5mYjM2ODI0IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RvY3VtZW50SW1wbC5jcHAKKysrIGIvc3JjL2RvbS9Eb2N1bWVudEltcGwuY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo0MyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjUgIDE5OTkvMTEvMDggMjA6NDQ6MjQgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMTQsNyArMTE5LDcgQEAKIDogTm9kZUltcGwobnVsbCwgbmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCBET01fTm9kZTo6RE9DVU1FTlRfTk9ERSwgZmFsc2UsIG51bGwpCiB7CiAgICAgaWYgKGRvY3R5cGUgIT0gbnVsbCAmJiBkb2N0eXBlLT5nZXRPd25lckRvY3VtZW50KCkgIT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAJICAgIERPTV9ET01FeGNlcHRpb246OldST05HX0RPQ1VNRU5UX0VSUiwgbnVsbCk7CiAgICAgZG9jVHlwZT1kb2N0eXBlOwogICAgIGlmIChkb2N0eXBlICE9IG51bGwpCkBAIC0xNTksNyArMTY0LDcgQEAKIEF0dHJJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUF0dHJpYnV0ZShjb25zdCBET01TdHJpbmcgJm5hbSkKIHsKICAgICBpZighaXNYTUxOYW1lKG5hbSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUixudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsbnVsbCk7CiAgICAgcmV0dXJuIG5ldyBBdHRySW1wbCh0aGlzLG5hbSk7CiB9OwogCkBAIC0xODgsNyArMTkzLDcgQEAKIERvY3VtZW50VHlwZUltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRG9jdW1lbnRUeXBlKGNvbnN0IERPTVN0cmluZyAmbmFtKQogewogICAgIGlmICghaXNYTUxOYW1lKG5hbSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsIG51bGwpOwogCiAgICAgcmV0dXJuIG5ldyBEb2N1bWVudFR5cGVJbXBsKHRoaXMsIG5hbSk7CkBAIC0xOTksNyArMjA0LDcgQEAKIEVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1lKQogewogICAgIGlmKCFpc1hNTE5hbWUodGFnTmFtZSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUixudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsbnVsbCk7CiAgICAgRE9NU3RyaW5nIHBvb2xlZFRhZ05hbWUgPSB0aGlzLT5uYW1lUG9vbC0+Z2V0UG9vbGVkU3RyaW5nKHRhZ05hbWUpOwogICAgIHJldHVybiBuZXcgRWxlbWVudEltcGwodGhpcyxwb29sZWRUYWdOYW1lKTsKIH07CkBAIC0yMTcsNyArMjIyLDcgQEAKIEVudGl0eUltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRW50aXR5KGNvbnN0IERPTVN0cmluZyAmbmFtKQogewogICAgIGlmICghaXNYTUxOYW1lKG5hbSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsIG51bGwpOwogCiAgICAgcmV0dXJuIG5ldyBFbnRpdHlJbXBsKHRoaXMsIG5hbSk7CkBAIC0yMjgsNyArMjMzLDcgQEAKIEVudGl0eVJlZmVyZW5jZUltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRW50aXR5UmVmZXJlbmNlKGNvbnN0IERPTVN0cmluZyAmbmFtKQogewogICAgIGlmICghaXNYTUxOYW1lKG5hbSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsIG51bGwpOwogCiAgICAgcmV0dXJuIG5ldyBFbnRpdHlSZWZlcmVuY2VJbXBsKHRoaXMsIG5hbSk7CkBAIC0yMzksNyArMjQ0LDcgQEAKIE5vdGF0aW9uSW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVOb3RhdGlvbihjb25zdCBET01TdHJpbmcgJm5hbSkKIHsKICAgICBpZiAoIWlzWE1MTmFtZShuYW0pKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLCBudWxsKTsKIAogICAgIHJldHVybiBuZXcgTm90YXRpb25JbXBsKHRoaXMsIG5hbSk7CkBAIC0yNTEsNyArMjU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmdGFyZ2V0LCBjb25zdCBET01TdHJpbmcgJmRhdGEpCiB7CiAgICAgaWYoIWlzWE1MTmFtZSh0YXJnZXQpKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLG51bGwpOwogICAgIHJldHVybiBuZXcgUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCh0aGlzLHRhcmdldCxkYXRhKTsKIH07CiAKQEAgLTQyOSw3ICs0MzQsNyBAQAogCiAgICAgY2FzZSBET01fTm9kZTo6RE9DVU1FTlRfTk9ERSA6IC8vIERvY3VtZW50IGNhbid0IGJlIGNoaWxkIG9mIERvY3VtZW50CiAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtub3duIG5vZGUgdHlwZQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpISUVSQVJDSFlfUkVRVUVTVF9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSLG51bGwpOwogICAgIH0KIAogICAgIC8vIElmIGRlZXAsIHJlcGxpY2F0ZSBhbmQgYXR0YWNoIHRoZSBraWRzLgpAQCAtNDUyLDcgKzQ1Nyw3IEBACiAgICAgICAgIHx8CiAgICAgICAgIChuZXdDaGlsZC0+aXNEb2N1bWVudFR5cGVJbXBsKCkgJiYgZG9jVHlwZSE9bnVsbCkKICAgICAgICAgKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpISUVSQVJDSFlfUkVRVUVTVF9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSLG51bGwpOwogCiAgICAgTm9kZUltcGw6Omluc2VydEJlZm9yZShuZXdDaGlsZCxyZWZDaGlsZCk7CiAKQEAgLTUxOCw3ICs1MjMsNyBAQAogCiB2b2lkIERvY3VtZW50SW1wbDo6c2V0Tm9kZVZhbHVlKGNvbnN0IERPTVN0cmluZyAmeCkKIHsKLSAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOworICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKIH07CiAKIApAQCAtNTQ3LDcgKzU1Miw3IEBACiAgICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsIHx8IG5hbWVzcGFjZVVSSS5sZW5ndGgoKSA9PSAwKQogCXJldHVybiBjcmVhdGVFbGVtZW50KHF1YWxpZmllZE5hbWUpOwogICAgIGlmKCFpc1hNTE5hbWUocXVhbGlmaWVkTmFtZSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUixudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsbnVsbCk7CiAgICAgLy9ET01TdHJpbmcgcG9vbGVkVGFnTmFtZSA9IHRoaXMtPm5hbWVQb29sLT5nZXRQb29sZWRTdHJpbmcocXVhbGlmaWVkTmFtZSk7CiAgICAgcmV0dXJuIG5ldyBFbGVtZW50SW1wbCh0aGlzLCBuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpOwogfQpAQCAtNTU5LDcgKzU2NCw3IEBACiAgICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsIHx8IG5hbWVzcGFjZVVSSS5sZW5ndGgoKSA9PSAwKQogCXJldHVybiBjcmVhdGVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7CiAgICAgaWYoIWlzWE1MTmFtZShxdWFsaWZpZWROYW1lKSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUixudWxsKTsKICAgICByZXR1cm4gbmV3IEF0dHJJbXBsKHRoaXMsIG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSk7IAogfQogCmRpZmYgLS1naXQgYS9zcmMvZG9tL0RvY3VtZW50VHlwZUltcGwuY3BwIGIvc3JjL2RvbS9Eb2N1bWVudFR5cGVJbXBsLmNwcAppbmRleCA1YzQ3NjIwLi42MTFhMjk2IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RvY3VtZW50VHlwZUltcGwuY3BwCisrKyBiL3NyYy9kb20vRG9jdW1lbnRUeXBlSW1wbC5jcHAKQEAgLTU2LDggKzU2LDEzIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODo0NCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjE6MTY6MjUgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjQ0ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoyNCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTE3OCw3ICsxODMsNyBAQAogCiB2b2lkIERvY3VtZW50VHlwZUltcGw6OnNldE5vZGVWYWx1ZShjb25zdCBET01TdHJpbmcgJnZhbCkKIHsKLSAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogfTsKIApkaWZmIC0tZ2l0IGEvc3JjL2RvbS9FbGVtZW50SW1wbC5jcHAgYi9zcmMvZG9tL0VsZW1lbnRJbXBsLmNwcAppbmRleCBlYTYyYzE3Li5jOTEzNjk2IDEwMDY0NAotLS0gYS9zcmMvZG9tL0VsZW1lbnRJbXBsLmNwcAorKysgYi9zcmMvZG9tL0VsZW1lbnRJbXBsLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjA4ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MDggIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjI2ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMjEyLDcgKzIxNyw3IEBACiB2b2lkIEVsZW1lbnRJbXBsOjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgRE9NU3RyaW5nICZuYW0pCiB7CiAgICAgaWYgKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKICAgICAKICAgICBBdHRySW1wbCAqYXR0ID0gKEF0dHJJbXBsICopIGF0dHJpYnV0ZXMtPmdldE5hbWVkSXRlbShuYW0pOwpAQCAtMjMxLDcgKzIzNiw3IEBACiBBdHRySW1wbCAqRWxlbWVudEltcGw6OnJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ckltcGwgKm9sZEF0dHIpCiB7CiAgICAgaWYgKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKICAgICAKICAgICBBdHRySW1wbCAqZm91bmQgPSAoQXR0ckltcGwgKikgYXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKG9sZEF0dHItPmdldE5hbWUoKSk7CkBAIC0yNDYsNyArMjUxLDcgQEAKICAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgIH0KICAgICBlbHNlCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsIG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsIG51bGwpOwogCXJldHVybiBudWxsOwkvLyBqdXN0IHRvIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5CiB9OwogCkBAIC0yNTUsNyArMjYwLDcgQEAKIHZvaWQgRWxlbWVudEltcGw6OnNldEF0dHJpYnV0ZShjb25zdCBET01TdHJpbmcgJm5hbSwgY29uc3QgRE9NU3RyaW5nICZ2YWwpCiB7CiAgICAgaWYgKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKICAgICAKICAgICBBdHRySW1wbCAqbmV3QXR0ciA9IChBdHRySW1wbCAqKSBvd25lckRvY3VtZW50LT5jcmVhdGVBdHRyaWJ1dGUobmFtKTsKQEAgLTI3NSwxMSArMjgwLDExIEBACiBBdHRySW1wbCAqIEVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHJJbXBsICpuZXdBdHRyKQogewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgaWYgKCEobmV3QXR0ci0+aXNBdHRySW1wbCgpKSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6V1JPTkdfRE9DVU1FTlRfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpXUk9OR19ET0NVTUVOVF9FUlIsIG51bGwpOwogICAgIEF0dHJJbXBsICpvbGRBdHRyID0gKEF0dHJJbXBsICopIGF0dHJpYnV0ZXMtPmdldE5hbWVkSXRlbShuZXdBdHRyLT5nZXROYW1lKCkpOwogICAgIGlmIChvbGRBdHRyKQogCW9sZEF0dHItPnNldE93bmVyRWxlbWVudChudWxsKTsJICAgIC8vRE9NIExldmVsIDIKQEAgLTMwMiw3ICszMDcsNyBAQAogCiB2b2lkIEVsZW1lbnRJbXBsOjpzZXROb2RlVmFsdWUoY29uc3QgRE9NU3RyaW5nICZ4KQogewotICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CisgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogfTsKIAogCkBAIC0zMzQsNyArMzM5LDcgQEAKIAlyZXR1cm47CiAgICAgfQogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAJICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgQXR0ckltcGwgKm5ld0F0dHIgPSAoQXR0ckltcGwgKikgb3duZXJEb2N1bWVudC0+Y3JlYXRlQXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKTsKQEAgLTM1OCw3ICszNjMsNyBAQAogCXJldHVybjsKICAgICB9CiAgICAgaWYgKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKIAkgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKICAgICAKICAgICBBdHRySW1wbCAqYXR0ID0gKEF0dHJJbXBsICopIGF0dHJpYnV0ZXMtPmdldE5hbWVkSXRlbU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKQEAgLTM4NiwxMSArMzkxLDExIEBACiAgICAgaWYgKG5ld0F0dHIgJiYgbmV3QXR0ciAtPmdldE5hbWVzcGFjZVVSSSgpID09IG51bGwpCiAJcmV0dXJuIHNldEF0dHJpYnV0ZU5vZGUobmV3QXR0cik7CiAgICAgaWYgKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKIAkgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKICAgICAKICAgICBpZiAobmV3QXR0ciAtPiBnZXRPd25lckRvY3VtZW50KCkgIT0gdGhpcyAtPiBnZXRPd25lckRvY3VtZW50KCkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OldST05HX0RPQ1VNRU5UX0VSUiwgbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6V1JPTkdfRE9DVU1FTlRfRVJSLCBudWxsKTsKICAgICBBdHRySW1wbCAqb2xkQXR0ciA9IChBdHRySW1wbCAqKSBhdHRyaWJ1dGVzLT5nZXROYW1lZEl0ZW1OUygKIAluZXdBdHRyLT5nZXROYW1lc3BhY2VVUkkoKSwgbmV3QXR0ci0+Z2V0TG9jYWxOYW1lKCkpOwogICAgIGlmIChvbGRBdHRyKQpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9FbnRpdHlJbXBsLmNwcCBiL3NyYy9kb20vRW50aXR5SW1wbC5jcHAKaW5kZXggNGFiMDU0OC4uY2Y1MWExYyAxMDA2NDQKLS0tIGEvc3JjL2RvbS9FbnRpdHlJbXBsLmNwcAorKysgYi9zcmMvZG9tL0VudGl0eUltcGwuY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MDggIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOTowOCAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MjYgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMTQsNyArMTE5LDcgQEAKIAogdm9pZCBFbnRpdHlJbXBsOjpzZXROb2RlVmFsdWUoY29uc3QgRE9NU3RyaW5nICZhcmcpCiB7Ci0gICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKKyAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiB9OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9kb20vRW50aXR5UmVmZXJlbmNlSW1wbC5jcHAgYi9zcmMvZG9tL0VudGl0eVJlZmVyZW5jZUltcGwuY3BwCmluZGV4IGQ2YTQ2OTEuLjE4ZDY3NjUgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vRW50aXR5UmVmZXJlbmNlSW1wbC5jcHAKKysrIGIvc3JjL2RvbS9FbnRpdHlSZWZlcmVuY2VJbXBsLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjA5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MDkgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjI3ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMjc0LDcgKzI3OSw3IEBACiAqLwogdm9pZCBFbnRpdHlSZWZlcmVuY2VJbXBsOjpzZXROb2RlVmFsdWUoY29uc3QgRE9NU3RyaW5nICZ4KQogewotICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CisgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogfQogCiAKQEAgLTI4OSw3ICsyOTQsNyBAQAogdm9pZCBFbnRpdHlSZWZlcmVuY2VJbXBsOjpzZXRSZWFkT25seShib29sIHJlYWRPbmwsYm9vbCBkZWVwKQogewogICAgIGlmKHJlYWRPbmw9PWZhbHNlKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLG51bGwpOwogICAgIE5vZGVJbXBsOjpzZXRSZWFkT25seShyZWFkT25sLGRlZXApOwogfQogCmRpZmYgLS1naXQgYS9zcmMvZG9tL01ha2VmaWxlLmluIGIvc3JjL2RvbS9NYWtlZmlsZS5pbgppbmRleCBjMWQ2NDYwLi5lZDZlNzU1IDEwMDY0NAotLS0gYS9zcmMvZG9tL01ha2VmaWxlLmluCisrKyBiL3NyYy9kb20vTWFrZWZpbGUuaW4KQEAgLTU1LDE2ICs1NSwzMCBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjExICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMTQgMjM6NTM6MjAgIHJhaHVsagorIyBSZW1vdmVkIHRoZSBvZmZlbmRpbmcgQ3RybC1NJ3MgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UKKyMgbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyMKKyMgUFI6CisjIE9idGFpbmVkIGZyb206CisjIFN1Ym1pdHRlZCBieToKKyMgUmV2aWV3ZWQgYnk6CisjCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo1OTo0MyAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KKyMgUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTEgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQ0OjI4ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCi0jOgorIwogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACkBAIC0yMTEsOSArMjI1LDYgQEAKIAlAZm9yIGZpbGUgaW4gJChET01fQ1BQX1BVQkhFQURFUlMpOyBkbyBcCiAJcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAogCWRvbmUKLQlAZm9yIGZpbGUgaW4gJChET01fQ19GSUxFUyk7IGRvIFwKLQlybSAtZiAkKFhNTF9JTkNfRElSKS8kKE1PRFVMRSkvJCRmaWxlOyBcCi0JZG9uZQogCUBlY2hvICJSZW1vdmluZyBhbGwgJChNT0RVTEUpIG9iamVjdCBmaWxlcyAuLi4iCiAJQGZvciBmaWxlIGluICQoRE9NX0NQUF9PQkpFQ1RTKTsgZG8gXAogCXJtIC1mICQoQUxMX09CSkVDVFNfRElSKS8kJGZpbGU7IFwKZGlmZiAtLWdpdCBhL3NyYy9kb20vTmFtZWROb2RlTWFwSW1wbC5jcHAgYi9zcmMvZG9tL05hbWVkTm9kZU1hcEltcGwuY3BwCmluZGV4IGQ2ZDVlN2IuLjdkOTZlZjQgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vTmFtZWROb2RlTWFwSW1wbC5jcHAKKysrIGIvc3JjL2RvbS9OYW1lZE5vZGVNYXBJbXBsLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjExICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjI5ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTc1LDcgKzE4MCw3IEBACiAgICAgICAgIHdoaWxlKGZpcnN0PD1sYXN0KQogICAgICAgICB7CiAgICAgICAgICAgICBpPShmaXJzdCtsYXN0KS8yOwotICAgICAgICAgICAgaW50IHRlc3QgPSBuYW1lLnN0cmNtcChub2Rlcy0+ZWxlbWVudEF0KGkpLT5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgIGludCB0ZXN0ID0gbmFtZS5jb21wYXJlU3RyaW5nKG5vZGVzLT5lbGVtZW50QXQoaSktPmdldE5vZGVOYW1lKCkpOwogICAgICAgICAgICAgaWYodGVzdD09MCkKICAgICAgICAgICAgICAgICByZXR1cm4gaTsgLy8gTmFtZSBmb3VuZAogICAgICAgICAgICAgZWxzZSBpZih0ZXN0PDApCkBAIC0yNTksNyArMjY0LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgbm5vZGUgPSAoQXR0ckltcGwgKikgbm9kZXMtPmVsZW1lbnRBdChuKTsKICAgICAgICAgICAgIGRub2RlID0gKEF0dHJJbXBsICopIGRlZmF1bHRzLT5ub2Rlcy0+ZWxlbWVudEF0KGQpOwotICAgICAgICAgICAgaW50IHRlc3QgPSBubm9kZS0+Z2V0Tm9kZU5hbWUoKS5zdHJjbXAoIGRub2RlLT5nZXROb2RlTmFtZSgpKTsKKyAgICAgICAgICAgIGludCB0ZXN0ID0gbm5vZGUtPmdldE5vZGVOYW1lKCkuY29tcGFyZVN0cmluZyggZG5vZGUtPmdldE5vZGVOYW1lKCkpOwogICAgICAgICAgICAgLy8gbm5vZGUtPmdldE5vZGVOYW1lKCktPmNvbXBhcmVUbyhkbm9kZS0+Z2V0Tm9kZU5hbWUoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFNhbWUgbmFtZSBhbmQgYSBkZWZhdWx0IC0tIG1ha2Ugc3VyZSBzYW1lIHZhbHVlCkBAIC0zMTMsNyArMzE4LDcgQEAKIHsKICAgICBpbnQgaT1maW5kTmFtZVBvaW50KG5hbWUpOwogICAgIGlmKGk8MCkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgbnVsbCk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgTm9kZUltcGwgKiBuID0gKE5vZGVJbXBsICopIChub2Rlcy0+ZWxlbWVudEF0KGkpKTsKQEAgLTM1NCw3ICszNTksNyBAQAogICAgICAgcmV0dXJuIG47CiAgICAgICB9CiAgICAgICB9Ci0gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uSW1wbChET01FeGNlcHRpb24uTk9UX0ZPVU5EX0VSUiwgbnVsbCk7CisgICAgICB0aHJvdyBET01FeGNlcHRpb25JbXBsKERPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSLCBudWxsKTsKICAgICAqKioqKioqKioqKioqKi8gCiAJcmV0dXJuIG51bGw7CS8vIGp1c3QgdG8ga2VlcCB0aGUgY29tcGlsZXIgaGFwcHkKIH07CkBAIC0zNzksMTAgKzM4NCwxMCBAQAogTm9kZUltcGwgKiBOYW1lZE5vZGVNYXBJbXBsOjpzZXROYW1lZEl0ZW0oTm9kZUltcGwgKiBhcmcpCiB7CiAgICAgaWYoYXJnLT5nZXRPd25lckRvY3VtZW50KCkhPW93bmVyRG9jKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpXUk9OR19ET0NVTUVOVF9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6V1JPTkdfRE9DVU1FTlRfRVJSLG51bGwpOwogICAgIAogICAgIGlmIChhcmctPm93bmVkKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlVTRV9BVFRSSUJVVEVfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVVNFX0FUVFJJQlVURV9FUlIsbnVsbCk7CiAgICAgCiAgICAgYXJnLT5vd25lZCA9IHRydWU7CiAgICAgaW50IGk9ZmluZE5hbWVQb2ludChhcmctPmdldE5vZGVOYW1lKCkpOwpAQCAtNDk0LDEzICs0OTksMTMgQEAKIAljb25zdCBET01TdHJpbmcgJm5hbWUpCiB7CiAgICAgaWYgKHJlYWRPbmx5KQotCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorCXRocm93IERPTV9ET01FeGNlcHRpb24oCiAJICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsIHx8IG5hbWVzcGFjZVVSSS5sZW5ndGgoKSA9PSAwKQogCXJldHVybiByZW1vdmVOYW1lZEl0ZW0obmFtZSk7CiAgICAgaW50IGkgPSBmaW5kTmFtZVBvaW50KG5hbWVzcGFjZVVSSSwgbmFtZSk7CiAgICAgaWYgKGkgPCAwKQotCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsIG51bGwpOworCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgbnVsbCk7CiAgICAgTm9kZUltcGwgKiBuID0gbm9kZXMgLT4gZWxlbWVudEF0KGkpOyAgIC8vbm9kZSB0byBiZSByZW1vdmVkIG9yIHJlcGxhY2VkCiAgICAgLy9maW5kIGlmIG4gaGFzIGEgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGluIERURCwgaWYgc28gcmVwbGFjZSBuIGluIG5vZGVzCiAgICAgLy9ieSBpdHMgY29ycmVzcG9uZGluZyBkZWZhdWx0IHZhbHVlIG5vZGUsIG90aGVyd2lzZSByZW1vdmUgbiBmcm9tIG5vZGVzCmRpZmYgLS1naXQgYS9zcmMvZG9tL05vZGVGaWx0ZXJJbXBsLmNwcCBiL3NyYy9kb20vTm9kZUZpbHRlckltcGwuY3BwCmluZGV4IDg1OTkxNWMuLjZiZGUyYjIgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vTm9kZUZpbHRlckltcGwuY3BwCisrKyBiL3NyYy9kb20vTm9kZUZpbHRlckltcGwuY3BwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTIgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzIwIDAwOjU2OjM5ICByYWh1bGoKKyAqIFNvdXJjZSBmaWxlcyBtdXN0IGVuZCB3aXRoIGFuIHVuLWVzY2FwZWQgbmV3bGluZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjEyICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDoyOSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTkyLDQgKzk1LDQgQEAKIHZvaWQgTm9kZUZpbHRlckltcGw6OnVucmVmZXJlbmNlZCAoKQogewogICAgIGRlbGV0ZSB0aGlzOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL3NyYy9kb20vTm9kZUltcGwuY3BwIGIvc3JjL2RvbS9Ob2RlSW1wbC5jcHAKaW5kZXggZTFhZDQwZC4uMGNjZTU4YyAxMDA2NDQKLS0tIGEvc3JjL2RvbS9Ob2RlSW1wbC5jcHAKKysrIGIvc3JjL2RvbS9Ob2RlSW1wbC5jcHAKQEAgLTEsNjggKzEsODAgQEAKIC8qCi0gKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0gKiAKLSAqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotICogcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIAotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogCi0gKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0gKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0gKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotICogCi0gKiA0LiBUaGUgbmFtZXMgIlhlcmNlcyIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0gKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVcQGFwYWNoZS5vcmcuCi0gKiAKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAotICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAKLSAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0gKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgd2FzCi0gKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAotICogQnVzaW5lc3MgTWFjaGluZXMsIEluYy4sIGh0dHA6Ly93d3cuaWJtLmNvbSAuICBGb3IgbW9yZSBpbmZvcm1hdGlvbgotICogb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCi0gKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0gKi8KKyogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorKiAKKyogQ29weXJpZ2h0IChjKSAxOTk5IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCisqIHJlc2VydmVkLgorKiAKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyogCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqICAgIGRpc3RyaWJ1dGlvbi4KKyogCisqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCisqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAorKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorKiAKKyogNC4gVGhlIG5hbWVzICJYZXJjZXMiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKKyogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKKyogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlXEBhcGFjaGUub3JnLgorKiAKKyogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCisqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyogCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgorKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisqIFNVQ0ggREFNQUdFLgorKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiAKKyogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIHdhcworKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAorKiBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiwgaHR0cDovL3d3dy5pYm0uY29tIC4gIEZvciBtb3JlIGluZm9ybWF0aW9uCisqIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQorKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisqLwogCiAvKioKLSAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgotICoKLSAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoyOSAgcmFodWwKLSAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KLSAqCi0gKi8KKyogJExvZyQKKyogUmV2aXNpb24gMS4zICAxOTk5LzEyLzAzIDAwOjExOjIzICBhbmR5aAorKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorKiB3aGVyZSB0aGV5IGhhZCBiZWVuIG1pc3NlZC4KKyoKKyogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisqIGJlaW5nIG51bGwgdGVybWluYXRlZC4KKyoKKyogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisqCisqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTMgIHR3bAorKiBJbml0aWFsIGNoZWNraW4KKyoKKyogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjI5ICByYWh1bAorKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCisqCisqLwogCiAKICNpbmNsdWRlICJOb2RlSW1wbC5ocHAiCkBAIC04MSwxMiArOTMsMTIgQEAKICAgICAvLyBEbyB3ZSB3YW50IHRvIGFkZCBpc0xlYWZOb2RlIHRvIHRoaXM/IEhvdyBhYm91dCBpbml0aWFsIHZhbHVlPwogICAgIHRoaXMtPm93bmVyRG9jdW1lbnQ9b3duZXJEb2M7CiAgICAgdGhpcy0+bmFtZXNwYWNlVVJJPW51bGw7CS8vRE9NIExldmVsIDIKLSAgICB0aGlzLT5wcmVmaXg9bnVsbDsJCS8vRE9NIExldmVsIDIKLSAgICB0aGlzLT5sb2NhbE5hbWU9bmFtOwkvL0RPTSBMZXZlbCAyCi0gICAgdGhpcy0+bmFtZT1uYW07CisgICAgdGhpcy0+cHJlZml4PW51bGw7CQkJLy9ET00gTGV2ZWwgMgorICAgIHRoaXMtPmxvY2FsTmFtZT1udWxsOwkJLy9ET00gTGV2ZWwgMgorICAgIHRoaXMtPm5hbWU9bmFtLmNsb25lKCk7CiAgICAgdGhpcy0+blR5cGU9blR5cDsKICAgICB0aGlzLT5pc0xlYWZOb2RlPWlzTGVhZk5vZDsKLSAgICB0aGlzLT52YWx1ZT1pbml0VmFsdWU7CisgICAgdGhpcy0+dmFsdWU9aW5pdFZhbHVlLmNsb25lKCk7CiAgICAgCiAgICAgdGhpcy0+Y2hhbmdlcyA9IDA7CiAgICAgdGhpcy0+dXNlckRhdGEgPSBudWxsOwpAQCAtMTA2LDI1ICsxMTgsNDIgQEAKIAogLy9JbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCiBOb2RlSW1wbDo6Tm9kZUltcGwoRG9jdW1lbnRJbXBsICpvd25lckRvYywKLQljb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZxdWFsaWZpZWROYW1lLCBzaG9ydCBuVHlwLAotICAgICAgICBib29sIGlzTGVhZk5vZCwgY29uc3QgRE9NU3RyaW5nICZpbml0VmFsdWUpCisgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmcXVhbGlmaWVkTmFtZSwgc2hvcnQgblR5cCwKKyAgICAgICAgICAgICAgICAgICBib29sIGlzTGVhZk5vZCwgY29uc3QgRE9NU3RyaW5nICZpbml0VmFsdWUpCiB7CiAgICAgLy8gRG8gd2Ugd2FudCB0byBhZGQgaXNMZWFmTm9kZSB0byB0aGlzPyBIb3cgYWJvdXQgaW5pdGlhbCB2YWx1ZT8KICAgICB0aGlzLT5vd25lckRvY3VtZW50PW93bmVyRG9jOwotICAgIHRoaXMtPm5hbWVzcGFjZVVSST1uYW1lc3BhY2VVUkk7Ci0gICAgaW50IGluZGV4ID0gWE1MU3RyaW5nOjppbmRleE9mKHF1YWxpZmllZE5hbWUucmF3QnVmZmVyKCksIGNoQ29sb24pOwotICAgIGlmIChpbmRleCA+PSAwKSB7Ci0JdGhpcy0+cHJlZml4ID0gcXVhbGlmaWVkTmFtZS5zdWJzdHJpbmdEYXRhKDAsIGluZGV4KTsKLQlpbnQgbGVuID0gcXVhbGlmaWVkTmFtZS5sZW5ndGgoKSAtIGluZGV4IC0gMTsKLQl0aGlzLT5sb2NhbE5hbWUgPSBxdWFsaWZpZWROYW1lLnN1YnN0cmluZ0RhdGEoaW5kZXgrMSwgbGVuKTsKLSAgICB9IGVsc2UgewotCXRoaXMtPnByZWZpeCA9IG51bGw7Ci0JdGhpcy0+bG9jYWxOYW1lID0gcXVhbGlmaWVkTmFtZTsKKyAgICB0aGlzLT5uYW1lPXF1YWxpZmllZE5hbWUuY2xvbmUoKTsKKyAgICAKKyAgICB0aGlzLT5uYW1lc3BhY2VVUkk9bmFtZXNwYWNlVVJJLmNsb25lKCk7CisKKyAgICAvLyBMb29rIGluIHRoZSBxdWFsaWZpZWQgbmFtZSBwYXJhbWV0ZXIgZm9yIGEgY29sb24uCisgICAgLy8gIElmIGZvdW5kLCBicmVhayBvdXQgdGhlIHByZWZpeCBhbmQgbG9jYWwgbmFtZSBwYXJ0cy4KKyAgICAvLyAgICAoYnVnOiAgY2hlY2sgZm9yIHdlbGwgZm9ybWVkIG5hbWVzLikKKyAgICBYTUxDaCAgKnFOYW1lUCAgID0gdGhpcy0+bmFtZS5yYXdCdWZmZXIoKTsKKyAgICBpbnQgICAgcU5hbWVMZW4gPSB0aGlzLT5uYW1lLmxlbmd0aCgpOworICAgIGludCBpbmRleDsKKyAgICBmb3IgKGluZGV4PTA7IGluZGV4PHFOYW1lTGVuOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKHFOYW1lUFtpbmRleF0gPT0gY2hDb2xvbikKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy0+cHJlZml4ID0gdGhpcy0+bmFtZS5zdWJzdHJpbmdEYXRhKDAsIGluZGV4KTsKKyAgICAgICAgICAgIGludCBsZW4gPSB0aGlzLT5uYW1lLmxlbmd0aCgpIC0gaW5kZXggLSAxOworICAgICAgICAgICAgdGhpcy0+bG9jYWxOYW1lID0gdGhpcy0+bmFtZS5zdWJzdHJpbmdEYXRhKGluZGV4KzEsIGxlbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KLSAgICB0aGlzLT5uYW1lPXF1YWxpZmllZE5hbWU7CisKKyAgICBpZiAodGhpcy0+cHJlZml4ID09IG51bGwpCisgICAgeworICAgICAgICAvLyBUaGUgc2VhcmNoIGZvciBhIGNvbG9uLCBhYm92ZSwgaW4gdGhlIHF1YWxpZmllZCBuYW1lIGZhaWxlZC4KKyAgICAgICAgLy8gdGhlIGxvY2FsbmFtZSBpcyB0aGUgd2hvbGUgbmFtZSwgYW5kIHRoZXJlIGlzIG5vIHByZWZpeCBwYXJ0LgorICAgICAgICB0aGlzLT5sb2NhbE5hbWUgPSB0aGlzLT5uYW1lOworICAgIH0KKwogICAgIHRoaXMtPm5UeXBlPW5UeXA7CiAgICAgdGhpcy0+aXNMZWFmTm9kZT1pc0xlYWZOb2Q7Ci0gICAgdGhpcy0+dmFsdWU9aW5pdFZhbHVlOworICAgIHRoaXMtPnZhbHVlPWluaXRWYWx1ZS5jbG9uZSgpOwogICAgIAogICAgIHRoaXMtPmNoYW5nZXMgPSAwOwogICAgIHRoaXMtPnVzZXJEYXRhID0gbnVsbDsKQEAgLTE0NSw4ICsxNzQsOCBAQAogTm9kZUltcGw6Ok5vZGVJbXBsKGNvbnN0IE5vZGVJbXBsICZvdGhlciwgYm9vbCBkZWVwKSB7CiAgICAgdGhpcy0+blR5cGUgPSBvdGhlci5uVHlwZTsKICAgICB0aGlzLT5uYW1lc3BhY2VVUkkgPSBvdGhlci5uYW1lc3BhY2VVUkkuY2xvbmUoKTsJLy9ET00gTGV2ZWwgMgotICAgIHRoaXMtPnByZWZpeCA9IG90aGVyLnByZWZpeC5jbG9uZSgpOwkJLy9ET00gTGV2ZWwgMgotICAgIHRoaXMtPmxvY2FsTmFtZSA9IG90aGVyLmxvY2FsTmFtZS5jbG9uZSgpOwkJLy9ET00gTGV2ZWwgMgorICAgIHRoaXMtPnByZWZpeCA9IG90aGVyLnByZWZpeC5jbG9uZSgpOyAgICAgICAgICAgICAgICAvL0RPTSBMZXZlbCAyCisgICAgdGhpcy0+bG9jYWxOYW1lID0gb3RoZXIubG9jYWxOYW1lLmNsb25lKCk7ICAgICAgICAgIC8vRE9NIExldmVsIDIKICAgICB0aGlzLT5uYW1lICA9IG90aGVyLm5hbWUuY2xvbmUoKTsKICAgICB0aGlzLT52YWx1ZSA9IG90aGVyLnZhbHVlLmNsb25lKCk7CiAgICAgdGhpcy0+aXNMZWFmTm9kZSA9IG90aGVyLmlzTGVhZk5vZGU7CkBAIC0xNTksNyArMTg4LDcgQEAKICAgICB0aGlzLT5ub2RlUmVmQ291bnQgPSAwOwogICAgIE5vZGVJbXBsOjpnTGl2ZU5vZGVJbXBscysrOyAKICAgICBOb2RlSW1wbDo6Z1RvdGFsTm9kZUltcGxzKys7Ci0KKyAgICAKICAgICAKICAgICAvLyBOZWVkIHRvIGJyZWFrIHRoZSBhc3NvY2lhdGlvbiB3LyBvcmlnaW5hbCBraWRzCiAgICAgdGhpcy0+cHJldmlvdXNTaWJsaW5nID0gbnVsbDsKQEAgLTE4MiwxMSArMjExLDExIEBACiAKIGludCAgTm9kZUltcGw6OmdMaXZlTm9kZUltcGxzID0gMDsgICAgICAgICAvLyBDb3VudGVycyBmb3IgZGVidWcgJiB0dW5pbmcuCiBpbnQgIE5vZGVJbXBsOjpnVG90YWxOb2RlSW1wbHM9IDA7Ci0gICAgCisKIAogCiBOb2RlSW1wbDo6fk5vZGVJbXBsKCkgewotICAgICBOb2RlSW1wbDo6Z0xpdmVOb2RlSW1wbHMtLTsKKyAgICBOb2RlSW1wbDo6Z0xpdmVOb2RlSW1wbHMtLTsKIH07CiAKIApAQCAtMzQ2LDcgKzM3NSw3IEBACiAKIE5vZGVJbXBsICpOb2RlSW1wbDo6aW5zZXJ0QmVmb3JlKE5vZGVJbXBsICpuZXdDaGlsZCwgTm9kZUltcGwgKnJlZkNoaWxkKSB7CiAgICAgaWYgKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKICAgICAKICAgICBpZiggICEobmV3Q2hpbGQtPmdldE93bmVyRG9jdW1lbnQoKSA9PSBvd25lckRvY3VtZW50ICAgfHwKQEAgLTM1NCw3ICszODMsNyBAQAogICAgICAgICAoIHRoaXMtPmlzRG9jdW1lbnRJbXBsKCkgJiYKICAgICAgICAgbmV3Q2hpbGQtPmdldE93bmVyRG9jdW1lbnQoKSA9PSAoRG9jdW1lbnRJbXBsICopdGhpcyApIAogICAgICAgICApICkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6V1JPTkdfRE9DVU1FTlRfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpXUk9OR19ET0NVTUVOVF9FUlIsIG51bGwpOwogICAgIAogICAgIC8vIENvbnZlcnQgdG8gaW50ZXJuYWwgdHlwZSwgdG8gYXZvaWQgcmVwZWF0ZWQgY2FzdGluZyAgCiAgICAgLy8gICAobGVmdCBvdmVyIGZyb20gdGhlIG9yaWdpbmFsIEphdmEuICBNZWFuaW5nbGVzcyBpbiB0aGlzIHZlcnNpb24uKQpAQCAtMzY1LDExICszOTQsMTEgQEAKICAgICBmb3IoTm9kZUltcGwgKmE9dGhpcy0+cGFyZW50Tm9kZTt0cmVlU2FmZSAmJiBhIT1udWxsO2E9YS0+cGFyZW50Tm9kZSkKICAgICAgICAgdHJlZVNhZmU9KG5ld0ludGVybmFsIT1hKTsKICAgICBpZighdHJlZVNhZmUpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OkhJRVJBUkNIWV9SRVFVRVNUX0VSUixudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpISUVSQVJDSFlfUkVRVUVTVF9FUlIsbnVsbCk7CiAgICAgCiAgICAgLy8gcmVmQ2hpbGQgbXVzdCBpbiBmYWN0IGJlIGEgY2hpbGQgb2YgdGhpcyBub2RlIChvciBudWxsKQogICAgIGlmKHJlZkNoaWxkIT1udWxsICYmIHJlZkNoaWxkLT5wYXJlbnROb2RlICE9IHRoaXMpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUixudWxsKTsKICAgICAKICAgICBpZiAobmV3SW50ZXJuYWwtPmlzRG9jdW1lbnRGcmFnbWVudEltcGwoKSkKICAgICB7CkBAIC0zOTUsMTQgKzQyNCwxNCBAQAogICAgICAgICBraWQ9a2lkLT5nZXROZXh0U2libGluZygpKQogICAgICAgICB7CiAgICAgICAgICAgICBpZighaXNLaWRPSyh0aGlzLGtpZCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSLG51bGwpOworICAgICAgICAgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSLG51bGwpOwogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgd2hpbGUobmV3SW50ZXJuYWwtPmhhc0NoaWxkTm9kZXMoKSkgICAgIC8vIE1vdmUKICAgICAgICAgICAgIGluc2VydEJlZm9yZShuZXdJbnRlcm5hbC0+Z2V0Rmlyc3RDaGlsZCgpLHJlZkNoaWxkKTsKICAgICB9CiAgICAgCiAgICAgZWxzZSBpZighaXNLaWRPSyh0aGlzLCBuZXdJbnRlcm5hbCkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OkhJRVJBUkNIWV9SRVFVRVNUX0VSUixudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpISUVSQVJDSFlfUkVRVUVTVF9FUlIsbnVsbCk7CiAgICAgCiAgICAgZWxzZQogICAgIHsKQEAgLTUwMywxNyArNTMyLDE3IEBACiAgIHsKICAgICAgIFJlZkNvdW50ZWRJbXBsOjphZGRSZWYodGhpcy0+b3duZXJEb2N1bWVudCk7CiAgIH07Ci0KLQorICAKKyAgCiAgIAogICBOb2RlSW1wbCAqTm9kZUltcGw6OnJlbW92ZUNoaWxkKE5vZGVJbXBsICpvbGRDaGlsZCkgCiAgIHsKICAgICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgICAKICAgICAgIGlmIChvbGRDaGlsZCAhPSBudWxsICYmIG9sZENoaWxkLT5wYXJlbnROb2RlICE9IHRoaXMpCi0gICAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgbnVsbCk7CisgICAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCBudWxsKTsKICAgICAgIAogICAgICAgLy8gUGF0Y2ggdHJlZSBwYXN0IG9sZENoaWxkCiAgICAgICBOb2RlSW1wbCAqcHJldiA9IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmc7CkBAIC01NDYsOCArNTc1LDggQEAKICAgewogICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSB0aGlzLT5vd25lckRvY3VtZW50OwogICAgICAgZGVsZXRlSWYodGhpcyk7ICAgICAgIC8vIFRoaXMgZ2V0cyBub2RlcyBvdXRzaWRlIG9mIHRoZSBkb2N1bWVudCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBkZWxldGVJZigpIGRlbGV0ZXMgb25seSBpZiB0aGUgcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBub2RlIGlzIG51bGwuICAKKyAgICAgIC8vICAgZGVsZXRlSWYoKSBkZWxldGVzIG9ubHkgaWYgdGhlIHBhcmVudAorICAgICAgLy8gICBub2RlIGlzIG51bGwuICAKICAgICAgIAogICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3QgZXh0ZXJuYWwgcmVmZXJlbmNlIHdpdGhpbiB0aGUgZG9jdW1lbnQsCiAgICAgICAvLyAgICB0aGUgZW50aXJlIGRvY3VtZW50IHdpbGwgYmUgZGVsZXRlZCBhcyB3ZWxsLgpAQCAtNTY1LDcgKzU5NCw3IEBACiAgIHRoaXMgaW5zdGFuY2VvZiBEb2N1bWVudCAmJiAKICAgbmV3Q2hpbGQuZ2V0T3duZXJEb2N1bWVudCgpICE9IChEb2N1bWVudCkgdGhpcykKICAgewotICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uSW1wbChET01FeGNlcHRpb24uV1JPTkdfRE9DVU1FTlRfRVJSLCBudWxsKTsKKyAgdGhyb3cgRE9NRXhjZXB0aW9uSW1wbChET01FeGNlcHRpb24uV1JPTkdfRE9DVU1FTlRfRVJSLCBudWxsKTsKICAgfQogICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgICAgaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBvbGRDaGlsZCk7CkBAIC01NzksMTEgKzYwOCwxMSBAQAogICB2b2lkIE5vZGVJbXBsOjpzZXROb2RlVmFsdWUoY29uc3QgRE9NU3RyaW5nICZ2YWwpCiAgIHsKICAgICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgICAKICAgICAgIC8vIERlZmF1bHQgYmVoYXZpb3IsIG92ZXJyaWRkZW4gaW4gc29tZSBzdWJjbGFzc2VzCi0gICAgICB0aGlzLT52YWx1ZSA9IHZhbDsKKyAgICAgIHRoaXMtPnZhbHVlID0gdmFsLmNsb25lKCk7CiAgIH07CiAgIAogICAKQEAgLTYxNywzNyArNjQ2LDM3IEBACiAgICAgICAvLyByZXR1cm4gZ2V0Tm9kZU5hbWUoKTsKICAgfTsgICAgCiAgIAotLy9JbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0KLWJvb2wgTm9kZUltcGw6OnN1cHBvcnRzKGNvbnN0IERPTVN0cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3RyaW5nICZ2ZXJzaW9uKQotewotICAgIHJldHVybiBmYWxzZTsgICAvL211c3QgYmUgb3ZlcnJpZGVuIGJ5IGVhY2ggc3ViY2xhc3MKLX0KLQotRE9NU3RyaW5nIE5vZGVJbXBsOjpnZXROYW1lc3BhY2VVUkkoKQotewotICAgIHJldHVybiBuYW1lc3BhY2VVUkk7Ci19Ci0KLURPTVN0cmluZyBOb2RlSW1wbDo6Z2V0UHJlZml4KCkKLXsKLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1ET01TdHJpbmcgTm9kZUltcGw6OmdldExvY2FsTmFtZSgpCi17Ci0gICAgcmV0dXJuIGxvY2FsTmFtZTsKLX0KLQotdm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHJlZml4KQotewotICAgIGlmIChyZWFkT25seSkKLQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKLQkgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKLSAgICBpZiAoaXNBdHRySW1wbCgpIHx8IGlzRWxlbWVudEltcGwoKSkgewotCW5hbWUgPSB0aGlzIC0+IHByZWZpeCA9IHByZWZpeDsKLQluYW1lID0gbmFtZSArIGNoQ29sb24gKyBsb2NhbE5hbWU7ICAgIC8vbm9kZU5hbWUgaXMgY2hhbmdlZCB0b28KLQkvL3doYXQgdG8gZG8gaWYgbmFtZXNwYWNlVVJJIGlzIG51bGw/Ci0gICAgfQotCi19CisgIC8vSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgorICAKKyAgYm9vbCBOb2RlSW1wbDo6c3VwcG9ydHMoY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24pCisgIHsKKyAgICAgIHJldHVybiBmYWxzZTsgICAvL211c3QgYmUgb3ZlcnJpZGVuIGJ5IGVhY2ggc3ViY2xhc3MKKyAgfQorICAKKyAgRE9NU3RyaW5nIE5vZGVJbXBsOjpnZXROYW1lc3BhY2VVUkkoKQorICB7CisgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJOworICB9CisgIAorICBET01TdHJpbmcgTm9kZUltcGw6OmdldFByZWZpeCgpCisgIHsKKyAgICAgIHJldHVybiBwcmVmaXg7CisgIH0KKyAgCisgIERPTVN0cmluZyBOb2RlSW1wbDo6Z2V0TG9jYWxOYW1lKCkKKyAgeworICAgICAgcmV0dXJuIGxvY2FsTmFtZTsKKyAgfQorICAKKyAgdm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHJlZml4KQorICB7CisgICAgICBpZiAocmVhZE9ubHkpCisgICAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOworICAgICAgaWYgKGlzQXR0ckltcGwoKSB8fCBpc0VsZW1lbnRJbXBsKCkpIHsKKyAgICAgICAgICBuYW1lID0gdGhpcyAtPiBwcmVmaXggPSBwcmVmaXg7CisgICAgICAgICAgbmFtZSA9IG5hbWUgKyBjaENvbG9uICsgbG9jYWxOYW1lOyAgICAvL25vZGVOYW1lIGlzIGNoYW5nZWQgdG9vCisgICAgICAgICAgLy93aGF0IHRvIGRvIGlmIG5hbWVzcGFjZVVSSSBpcyBudWxsPworICAgICAgfQorICAgICAgCisgIH0KZGlmZiAtLWdpdCBhL3NyYy9kb20vTm9kZUl0ZXJhdG9ySW1wbC5jcHAgYi9zcmMvZG9tL05vZGVJdGVyYXRvckltcGwuY3BwCmluZGV4IDllYjY0ZjYuLmVlYzMyNGIgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vTm9kZUl0ZXJhdG9ySW1wbC5jcHAKKysrIGIvc3JjL2RvbS9Ob2RlSXRlcmF0b3JJbXBsLmNwcApAQCAtNTYsOCArNTYsMTkgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjE1ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8yMyAwMTo0ODoxNiAgcmFodWxqCisgKiBDaGFuZ2VkIDBMIHRvIDAuIENDIHVuZGVyIEhQVVggaXMgaGFwcHkgbm93LgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMCAwMDo1NjozOSAgcmFodWxqCisgKiBTb3VyY2UgZmlsZXMgbXVzdCBlbmQgd2l0aCBhbiB1bi1lc2NhcGVkIG5ld2xpbmUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOToxNSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MzAgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC05OCw3ICsxMDksNyBAQAogewogCWZEZXRhY2hlZCA9IGZhbHNlOwogICAgIGZSb290ID0gcm9vdDsKLSAgICBmQ3VycmVudE5vZGUgPSAwTDsKKyAgICBmQ3VycmVudE5vZGUgPSAwOwogICAgIGZXaGF0VG9TaG93ID0gd2hhdFRvU2hvdzsKICAgICBmTm9kZUZpbHRlciA9IG5vZGVGaWx0ZXI7CiAKQEAgLTE1OSw3ICsxNzAsNyBAQAogCiBET01fTm9kZSBOb2RlSXRlcmF0b3JJbXBsOjpuZXh0Tm9kZSAoKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAogCURPTV9Ob2RlIHJlc3VsdDsKIApAQCAtMjA4LDcgKzIxOSw3IEBACiAKIERPTV9Ob2RlIE5vZGVJdGVyYXRvckltcGw6OnByZXZpb3VzTm9kZSAoKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAkJCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC0yNTMsNyArMjY0LDcgQEAKIC8qKiBUaGUgbm9kZSBpcyBhY2NlcHRlZCBpZiBpdCBwYXNzZXMgdGhlIHdoYXRUb1Nob3cgYW5kIHRoZSBmaWx0ZXIuICovCiBib29sIE5vZGVJdGVyYXRvckltcGw6OmFjY2VwdE5vZGUgKERPTV9Ob2RlIG5vZGUpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCiAgICAgaWYgKGZOb2RlRmlsdGVyID09IDApIHsKICAgICAgICAgcmV0dXJuICgoZldoYXRUb1Nob3cgJiAoKDEgPDwgbm9kZS5nZXROb2RlVHlwZSgpKSAtIDEpKSAhPSAwKTsKQEAgLTI4NSw3ICsyOTYsNyBAQAogCiBET01fTm9kZSBOb2RlSXRlcmF0b3JJbXBsOjpuZXh0Tm9kZSAoRE9NX05vZGUgbm9kZSwgYm9vbCB2aXNpdENoaWxkcmVuKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAogICAgIGlmIChub2RlLmlzTnVsbCgpKSByZXR1cm4gZlJvb3Q7CiAKQEAgLTMyOCw3ICszMzksNyBAQAogCiBET01fTm9kZSBOb2RlSXRlcmF0b3JJbXBsOjpwcmV2aW91c05vZGUgKERPTV9Ob2RlIG5vZGUpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCiAgICAgRE9NX05vZGUgcmVzdWx0OwogCkBAIC0zNjEsNyArMzcyLDcgQEAKIAogdm9pZCBOb2RlSXRlcmF0b3JJbXBsOjpyZW1vdmVOb2RlIChET01fTm9kZSBub2RlKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAogICAgIC8vIEltcGxlbWVudGF0aW9uIG5vdGU6IEZpeC11cCBtZWFucyBzZXR0aW5nIHRoZSBjdXJyZW50IG5vZGUgcHJvcGVybHkKICAgICAvLyBhZnRlciBhIHJlbW92ZS4KQEAgLTQxNiw0ICs0MjcsNCBAQAogICAgIH0KIAogICAgIGRlbGV0ZSB0aGlzOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL3NyYy9kb20vTm90YXRpb25JbXBsLmNwcCBiL3NyYy9kb20vTm90YXRpb25JbXBsLmNwcAppbmRleCA0NTEyNTJlLi5jOTcxMzU4IDEwMDY0NAotLS0gYS9zcmMvZG9tL05vdGF0aW9uSW1wbC5jcHAKKysrIGIvc3JjL2RvbS9Ob3RhdGlvbkltcGwuY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTcgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOToxNyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MzEgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMjgsMTQgKzEzMywxNCBAQAogCiB2b2lkIE5vdGF0aW9uSW1wbDo6c2V0Tm9kZVZhbHVlKGNvbnN0IERPTVN0cmluZyAmYXJnKQogewotICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CisgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogfTsKIAogCiB2b2lkIE5vdGF0aW9uSW1wbDo6c2V0UHVibGljSWQoY29uc3QgRE9NU3RyaW5nICZhcmcpCiB7CiAgICAgaWYocmVhZE9ubHkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsbnVsbCk7CiAgICAgCiAgICAgcHVibGljSWQgPSBhcmcuY2xvbmUoKTsKQEAgLTE0NSw3ICsxNTAsNyBAQAogdm9pZCBOb3RhdGlvbkltcGw6OnNldFN5c3RlbUlkKGNvbnN0IERPTVN0cmluZyAmYXJnKQogewogICAgIGlmKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLG51bGwpOwogICAgIAogICAgIHN5c3RlbUlkID0gYXJnLmNsb25lKCk7CmRpZmYgLS1naXQgYS9zcmMvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwuY3BwIGIvc3JjL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsLmNwcAppbmRleCA2ZTBmNmIwLi4zN2E1OTYzIDEwMDY0NAotLS0gYS9zcmMvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwuY3BwCisrKyBiL3NyYy9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbC5jcHAKQEAgLTU2LDggKzU2LDEzIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToxOCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjE6MTY6MjYgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjE4ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDozMiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEyNiw3ICsxMzEsNyBAQAogdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsOjpzZXREYXRhKGNvbnN0IERPTVN0cmluZyAmYXJnKQogewogICAgIGlmKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLG51bGwpOwogICAgIAogICAgIHZhbHVlID0gYXJnOwpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9UZXh0SW1wbC5jcHAgYi9zcmMvZG9tL1RleHRJbXBsLmNwcAppbmRleCBhM2U2N2RlLi4xNjlmMzczIDEwMDY0NAotLS0gYS9zcmMvZG9tL1RleHRJbXBsLmNwcAorKysgYi9zcmMvZG9tL1RleHRJbXBsLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjE5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNiAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTkgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjMzICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTA1LDEwICsxMTAsMTAgQEAKIFRleHRJbXBsICpUZXh0SW1wbDo6c3BsaXRUZXh0KGludCBvZmZzZXQpCiB7CiAgICAgICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiB2YWx1ZS5sZW5ndGgoKSAtIDEpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUiwgbnVsbCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIFRleHRJbXBsICpuZXdUZXh0ID0gCiAgICAgICAgICAgICAgICAgKFRleHRJbXBsICopIG93bmVyRG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKApkaWZmIC0tZ2l0IGEvc3JjL2RvbS9UcmVlV2Fsa2VySW1wbC5jcHAgYi9zcmMvZG9tL1RyZWVXYWxrZXJJbXBsLmNwcAppbmRleCA1YzM2YzVhLi42N2I5YTkzIDEwMDY0NAotLS0gYS9zcmMvZG9tL1RyZWVXYWxrZXJJbXBsLmNwcAorKysgYi9zcmMvZG9tL1RyZWVXYWxrZXJJbXBsLmNwcApAQCAtNTYsOCArNTYsMTYgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjIwICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8zMCAyMToxNjoyNiAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo0ODoxNyAgcmFodWxqCisgKiBDaGFuZ2VkIDBMIHRvIDAuIENDIHVuZGVyIEhQVVggaXMgaGFwcHkgbm93LgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjAgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjMzICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTU2LDcgKzE2NCw3IEBACiAvKiogUmV0dXJuIHRoZSBjdXJyZW50IE5vZGUuICovCiBET01fTm9kZSBUcmVlV2Fsa2VySW1wbDo6Z2V0Q3VycmVudE5vZGUgKCkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKICAgICByZXR1cm4gZkN1cnJlbnROb2RlOwogfQpAQCAtMTY1LDcgKzE3Myw3IEBACiAvKiogUmV0dXJuIHRoZSBjdXJyZW50IE5vZGUuICovCiB2b2lkIFRyZWVXYWxrZXJJbXBsOjpzZXRDdXJyZW50Tm9kZSAoRE9NX05vZGUgbm9kZSkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKICAgICBmQ3VycmVudE5vZGUgPSBub2RlOwogfQpAQCAtMTc3LDE0ICsxODUsMTQgQEAKICAqLwogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OnBhcmVudE5vZGUgKCkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKIAlET01fTm9kZSByZXN1bHQ7CiAKICAgICBpZiAoZkN1cnJlbnROb2RlLmlzTnVsbCgpKSByZXR1cm4gcmVzdWx0OwogCiAgICAgRE9NX05vZGUgbm9kZSA9IGdldFBhcmVudE5vZGUoZkN1cnJlbnROb2RlKTsKLSAgICBpZiAobm9kZSAhPSAwTCkgeworICAgIGlmIChub2RlICE9IDApIHsKICAgICAgICAgZkN1cnJlbnROb2RlID0gbm9kZTsKICAgICB9CiAgICAgcmV0dXJuIG5vZGU7CkBAIC0xOTgsNyArMjA2LDcgQEAKICAqLwogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OmZpcnN0Q2hpbGQgKCkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKIAlET01fTm9kZSByZXN1bHQ7CiAKQEAgLTIxOCw3ICsyMjYsNyBAQAogICovCiBET01fTm9kZSBUcmVlV2Fsa2VySW1wbDo6bGFzdENoaWxkICgpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCQkKIAlET01fTm9kZSByZXN1bHQ7CiAKQEAgLTIzOSw3ICsyNDcsNyBAQAogCiBET01fTm9kZSBUcmVlV2Fsa2VySW1wbDo6cHJldmlvdXNTaWJsaW5nICgpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCQogCURPTV9Ob2RlIHJlc3VsdDsKIApAQCAtMjYwLDcgKzI2OCw3IEBACiAKIERPTV9Ob2RlIFRyZWVXYWxrZXJJbXBsOjpuZXh0U2libGluZyAoKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAkJCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC0yODEsNyArMjg5LDcgQEAKIAogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OnByZXZpb3VzTm9kZSAoKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAogICAgIERPTV9Ob2RlIHJlc3VsdDsKIApAQCAtMzI1LDcgKzMzMyw3IEBACiAKIERPTV9Ob2RlIFRyZWVXYWxrZXJJbXBsOjpuZXh0Tm9kZSAoKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAkKIAlET01fTm9kZSByZXN1bHQ7CiAKQEAgLTM3MCw3ICszNzgsNyBAQAogCiBET01fTm9kZSBUcmVlV2Fsa2VySW1wbDo6Z2V0UGFyZW50Tm9kZSAoRE9NX05vZGUgbm9kZSkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAJCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC00MDAsNyArNDA4LDcgQEAKIAogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OmdldE5leHRTaWJsaW5nIChET01fTm9kZSBub2RlKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAkKIAlET01fTm9kZSByZXN1bHQ7CiAKQEAgLTQ1MCw3ICs0NTgsNyBAQAogCiBET01fTm9kZSBUcmVlV2Fsa2VySW1wbDo6Z2V0UHJldmlvdXNTaWJsaW5nIChET01fTm9kZSBub2RlKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAkJCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC00OTksNyArNTA3LDcgQEAKIAogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OmdldEZpcnN0Q2hpbGQgKERPTV9Ob2RlIG5vZGUpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCQkKIAlET01fTm9kZSByZXN1bHQ7CiAKQEAgLTUzMyw3ICs1NDEsNyBAQAogCiBET01fTm9kZSBUcmVlV2Fsa2VySW1wbDo6Z2V0TGFzdENoaWxkIChET01fTm9kZSBub2RlKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAogCURPTV9Ob2RlIHJlc3VsdDsKIApAQCAtNTY1LDkgKzU3Myw5IEBACiAKIHNob3J0IFRyZWVXYWxrZXJJbXBsOjphY2NlcHROb2RlIChET01fTm9kZSBub2RlKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAotICAgIGlmIChmTm9kZUZpbHRlciA9PSAwTCkgeworICAgIGlmIChmTm9kZUZpbHRlciA9PSAwKSB7CiAgICAgICAgIGlmICggKCBmV2hhdFRvU2hvdyAmICgxIDw8IChub2RlLmdldE5vZGVUeXBlKCkgLSAxKSkpICE9IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBET01fTm9kZUZpbHRlcjo6QUNDRVBUOwpkaWZmIC0tZ2l0IGEvc3JjL2ZyYW1ld29yay9NYWtlZmlsZS5pbiBiL3NyYy9mcmFtZXdvcmsvTWFrZWZpbGUuaW4KaW5kZXggNzY1MjdkYS4uZjEzNzY4ZiAxMDA2NDQKLS0tIGEvc3JjL2ZyYW1ld29yay9NYWtlZmlsZS5pbgorKysgYi9zcmMvZnJhbWV3b3JrL01ha2VmaWxlLmluCkBAIC01NSwxNiArNTUsMzAgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODoyNiAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4zICAxOTk5LzEyLzE0IDIzOjUzOjIxICByYWh1bGoKKyMgUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisjIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDE6NTk6NDcgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCisjIFJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjI2ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuNSAgMTk5OS8xMS8wOCAyMDo0NDozNCAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgotIzoKKyMKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApAQCAtMTQxLDkgKzE1NSw2IEBACiAJQGZvciBmaWxlIGluICQoRlJBTUVXT1JLX0NQUF9QVUJIRUFERVJTKTsgZG8gXAogCXJtIC1mICQoWE1MX0lOQ19ESVIpLyQoTU9EVUxFKS8kJGZpbGU7IFwKIAlkb25lCi0JQGZvciBmaWxlIGluICQoRlJBTUVXT1JLX0NfRklMRVMpOyBkbyBcCi0Jcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAotCWRvbmUKIAlAZWNobyAiUmVtb3ZpbmcgYWxsICQoTU9EVUxFKSBvYmplY3QgZmlsZXMgLi4uIgogCUBmb3IgZmlsZSBpbiAkKEZSQU1FV09SS19DUFBfT0JKRUNUUyk7IGRvIFwKIAlybSAtZiAkKEFMTF9PQkpFQ1RTX0RJUikvJCRmaWxlOyBcCmRpZmYgLS1naXQgYS9zcmMvZnJhbWV3b3JrL1hNTEJ1ZmZlci5jcHAgYi9zcmMvZnJhbWV3b3JrL1hNTEJ1ZmZlci5jcHAKaW5kZXggMWE0MTIwMC4uNDYzY2NhZiAxMDA2NDQKLS0tIGEvc3JjL2ZyYW1ld29yay9YTUxCdWZmZXIuY3BwCisrKyBiL3NyYy9mcmFtZXdvcmsvWE1MQnVmZmVyLmNwcApAQCAtNTYsOCArNTYsMTIgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjI5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTowNDoxOSAgcm9kZGV5CisgKiBVcGRhdGVzIHRvIHNvbWUgb2YgdGhlIGludGVybmFsIFZDKysgcHJvamVjdCBmaWxlcyBhbmQgc29tZSBzbWFsbAorICogZml4ZXMgdG8gbWFrZSBYTUxCdWZmZXIgY29ycmVjdGx5IGNoYXJhY3RlciBzaXplIGFnbm9zdGljLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6MjkgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjM1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODQsNyArODgsNyBAQAogICAgIGlmICghY291bnQpCiAgICAgICAgIGFjdHVhbENvdW50ID0gWE1MU3RyaW5nOjpzdHJpbmdMZW4oY2hhcnMpOwogICAgIGluc3VyZUNhcGFjaXR5KGFjdHVhbENvdW50KTsKLSAgICBtZW1jcHkoJmZCdWZmZXJbZkluZGV4XSwgY2hhcnMsIGFjdHVhbENvdW50ICogMik7CisgICAgbWVtY3B5KCZmQnVmZmVyW2ZJbmRleF0sIGNoYXJzLCBhY3R1YWxDb3VudCAqIHNpemVvZihYTUxDaCkpOwogICAgIGZJbmRleCArPSBhY3R1YWxDb3VudDsKIH0KIApAQCAtOTUsNyArOTksNyBAQAogICAgICAgICBhY3R1YWxDb3VudCA9IFhNTFN0cmluZzo6c3RyaW5nTGVuKGNoYXJzKTsKICAgICBmSW5kZXggPSAwOwogICAgIGluc3VyZUNhcGFjaXR5KGFjdHVhbENvdW50KTsKLSAgICBtZW1jcHkoZkJ1ZmZlciwgY2hhcnMsIGFjdHVhbENvdW50ICogMik7CisgICAgbWVtY3B5KGZCdWZmZXIsIGNoYXJzLCBhY3R1YWxDb3VudCAqIHNpemVvZihYTUxDaCkpOwogICAgIGZJbmRleCA9IGFjdHVhbENvdW50OwogfQogCkBAIC0xMDgsMTAgKzExMiwxMCBAQAogICAgIHVuc2lnbmVkIGludCBuZXdDYXAgPSAodW5zaWduZWQgaW50KShmQ2FwYWNpdHkgKiAxLjUpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIG5ldyBidWZmZXIKLSAgICBYTUxDaCogbmV3QnVmID0gbmV3IFhNTENoW25ld0NhcCsxXTsKKyAgICBYTUxDaCogbmV3QnVmID0gbmV3IFhNTENoW25ld0NhcCArIDFdOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvbGQgc3R1ZmYKLSAgICBtZW1jcHkobmV3QnVmLCBmQnVmZmVyLCBmQ2FwYWNpdHkgKiAyKTsKKyAgICBtZW1jcHkobmV3QnVmLCBmQnVmZmVyLCBmQ2FwYWNpdHkgKiBzaXplb2YoWE1MQ2gpKTsKIAogICAgIC8vIENsZWFuIHVwIG9sZCBidWZmZXIgYW5kIHN0b3JlIG5ldyBzdHVmZgogICAgIGRlbGV0ZSBbXSBmQnVmZmVyOwpAQCAtMTMwLDcgKzEzNCw3IEBACiAgICAgWE1MQ2gqIG5ld0J1ZiA9IG5ldyBYTUxDaFtuZXdDYXArMV07CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9sZCBzdHVmZgotICAgIG1lbWNweShuZXdCdWYsIGZCdWZmZXIsIGZDYXBhY2l0eSAqIDIpOworICAgIG1lbWNweShuZXdCdWYsIGZCdWZmZXIsIGZDYXBhY2l0eSAqIHNpemVvZihYTUxDaCkpOwogCiAgICAgLy8gQ2xlYW4gdXAgb2xkIGJ1ZmZlciBhbmQgc3RvcmUgbmV3IHN0dWZmCiAgICAgZGVsZXRlIFtdIGZCdWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvZnJhbWV3b3JrL1hNTFJlY29nbml6ZXIuaHBwIGIvc3JjL2ZyYW1ld29yay9YTUxSZWNvZ25pemVyLmhwcAppbmRleCA5NjgzNjEzLi45MDkyMjVmIDEwMDY0NAotLS0gYS9zcmMvZnJhbWV3b3JrL1hNTFJlY29nbml6ZXIuaHBwCisrKyBiL3NyYy9mcmFtZXdvcmsvWE1MUmVjb2duaXplci5ocHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogICRMb2ckCi0gKiAgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjM3ICB0d2wKLSAqICBJbml0aWFsIHJldmlzaW9uCisgKiAgUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAxOjQ5OjI3ICByYWh1bGoKKyAqICBDYW5ub3QgdXNlIGNsYXNzIHF1YWxpZmllciBpbiBjbGFzcyBkZWZuLiBDQyB1bmRlciBIUFVYIGlzIGhhcHB5LgorICoKKyAqICBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjM3ICB0d2wKKyAqICBJbml0aWFsIGNoZWNraW4KICAqCiAgKiAgUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjQwICByYWh1bAogICogIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEyNSwxMyArMTI4LDEzIEBACiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyAgRW5jb2RpbmcgcmVjb2duaXRpb24gbWV0aG9kcwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIFhNTFJlY29nbml6ZXI6OkVuY29kaW5ncyBiYXNpY0VuY29kaW5nUHJvYmUKKyAgICBzdGF0aWMgRW5jb2RpbmdzIGJhc2ljRW5jb2RpbmdQcm9iZQogICAgICgKICAgICAgICAgY29uc3QgICBYTUxCeXRlKiBjb25zdCAgICAgIHJhd0J1ZmZlcgogICAgICAgICAsIGNvbnN0IHVuc2lnbmVkIGludCAgICAgICAgcmF3Qnl0ZUNvdW50CiAgICAgKTsKIAotICAgIHN0YXRpYyBYTUxSZWNvZ25pemVyOjpFbmNvZGluZ3MgZW5jb2RpbmdGb3JOYW1lCisgICAgc3RhdGljIEVuY29kaW5ncyBlbmNvZGluZ0Zvck5hbWUKICAgICAoCiAgICAgICAgIGNvbnN0ICAgWE1MQ2gqIGNvbnN0ICAgIHRoZUVuY05hbWUKICAgICApOwpkaWZmIC0tZ2l0IGEvc3JjL2ZyYW1ld29yay9YTUxWYWxpZGF0b3IuY3BwIGIvc3JjL2ZyYW1ld29yay9YTUxWYWxpZGF0b3IuY3BwCmluZGV4IGY0ZmIxY2UuLmU0MTkxNDMgMTAwNjQ0Ci0tLSBhL3NyYy9mcmFtZXdvcmsvWE1MVmFsaWRhdG9yLmNwcAorKysgYi9zcmMvZnJhbWV3b3JrL1hNTFZhbGlkYXRvci5jcHAKQEAgLTU2LDggKzU2LDE3IEBACiAKIC8qKgogICAqICRMb2ckCi0gICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjM3ICB0d2wKLSAgKiBJbml0aWFsIHJldmlzaW9uCisgICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzA4IDAwOjE1OjA2ICByb2RkZXkKKyAgKiBTb21lIHNtYWxsIGxhc3QgbWludXRlIGZpeGVzIHRvIGdldCBpbnRvIHRoZSAzLjAuMSBidWlsZCB0aGF0IGlzIGdvaW5nIHRvIGJlCisgICogZ29pbmcgb3V0IGFueXdheSBmb3IgcGxhdGZvcm0gZml4ZXMuCisgICoKKyAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDIgMTk6MDI6NTYgIHJvZGRleQorICAqIEdldCByaWQgb2YgYSBmZXcgc3RhdGljYWxseSBkZWZpbmVkIFhNTE11dGV4IG9iamVjdHMsIGFuZCBsYXp5IGV2YWwgdGhlbQorICAqIHVzaW5nIGF0b21pYyBjb21wYXJlIGFuZCBzd2FwLiBJIHNvbWVob3cgbGV0IGl0IGdldCBieSBtZSB0aGF0IHdlIGRvbid0CisgICogd2FudCBhbnkgc3RhdGljL2dsb2JhbCBvYmplY3RzIGF0IGFsbC4KKyAgKgorICAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6MzcgIHR3bAorICAqIEluaXRpYWwgY2hlY2tpbgogICAqCiAgICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjQwICByYWh1bAogICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTc5LDE2ICs4OCwzNSBAQAogCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIExvY2FsIHN0YXRpYyBkYXRhCisvLyAgTG9jYWwgc3RhdGljIGZ1bmN0aW9ucwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgWE1MTXV0ZXggICAgICAgICBnVmFsaWRhdG9yTXV0ZXg7Ci1zdGF0aWMgWE1MTXNnTG9hZGVyJiAgICBnZXRNc2dMb2FkZXIoKQorCisvLworLy8gIFdlIG5lZWQgdG8gZmF1bHQgaW4gdGhpcyBtdXRleC4gQnV0LCBzaW5jZSBpdHMgdXNlZCBmb3Igc3luY2hyb25pemF0aW9uCisvLyAgaXRzZWxmLCB3ZSBoYXZlIHRvIGRvIHRoaXMgdGhlIGxvdyBsZXZlbCB3YXkgdXNpbmcgYSBjb21wYXJlIGFuZCBzd2FwLgorLy8KK3N0YXRpYyBYTUxNdXRleCYgZ1ZhbGlkYXRvck11dGV4KCkKK3sKKyAgICBzdGF0aWMgWE1MTXV0ZXgqIHZhbGlkYXRvck11dGV4ID0gMDsKKyAgICBpZiAoIXZhbGlkYXRvck11dGV4KQorICAgIHsKKyAgICAgICAgWE1MTXV0ZXgqIHRtcE11dGV4ID0gbmV3IFhNTE11dGV4OworICAgICAgICBpZiAoWE1MUGxhdGZvcm1VdGlsczo6Y29tcGFyZUFuZFN3YXAoKHZvaWQqKikmdmFsaWRhdG9yTXV0ZXgsIHRtcE11dGV4LCAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU29tZW9uZSBiZWF0IHVzIHRvIGl0LCBzbyBsZXQncyBjbGVhbiB1cCBvdXJzCisgICAgICAgICAgICBkZWxldGUgdG1wTXV0ZXg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICp2YWxpZGF0b3JNdXRleDsKK30KKworc3RhdGljIFhNTE1zZ0xvYWRlciYgZ2V0TXNnTG9hZGVyKCkKIHsKICAgICBzdGF0aWMgWE1MTXNnTG9hZGVyKiBnTXNnTG9hZGVyID0gMDsKIAogICAgIGlmICghZ01zZ0xvYWRlcikKICAgICB7Ci0gICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1ZhbGlkYXRvck11dGV4KTsKKyAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnVmFsaWRhdG9yTXV0ZXgoKSk7CiAgICAgICAgIGlmICghZ01zZ0xvYWRlcikKICAgICAgICAgewogICAgICAgICAgICAgZ01zZ0xvYWRlciA9IFhNTFBsYXRmb3JtVXRpbHM6OmxvYWRNc2dTZXQoWE1MVW5pOjpmZ1ZhbGlkaXR5RG9tYWluKTsKQEAgLTEyMCw3ICsxNDgsNyBAQAogCiAgICAgICAgIC8vIExvY2sgdGhlIG11dGV4IGFuZCBsb2FkIHRoZSB0ZXh0CiAgICAgICAgIHsKLSAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1ZhbGlkYXRvck11dGV4KTsKKyAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1ZhbGlkYXRvck11dGV4KCkpOwogICAgICAgICAgICAgaWYgKCFnZXRNc2dMb2FkZXIoKS5sb2FkTXNnKHRvRW1pdCwgZXJyVGV4dCwgbXNnU2l6ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gPFRCRD4gUHJvYmFibHkgc2hvdWxkIGxvYWQgYSBkZWZhdWx0IG1zZyBoZXJlCkBAIC0xNTAsMTUgKzE3OCwxNSBAQAogICAgIH0KIAogICAgIC8vIEJhaWwgb3V0IGlmIGl0cyBmYXRhbCBhbiB3ZSBhcmUgdG8gZ2l2ZSB1cCBvbiB0aGUgZmlyc3QgZmF0YWwgZXJyb3IKLSAgICBpZiAoWE1MNENWYWxpZDo6aXNGYXRhbCh0b0VtaXQpCisgICAgaWYgKChYTUw0Q1ZhbGlkOjppc1ZhbGlkKHRvRW1pdCkgfHwgWE1MNENWYWxpZDo6aXNGYXRhbCh0b0VtaXQpKQogICAgICYmICBmU2Nhbm5lci0+Z2V0RXhpdE9uRmlyc3RGYXRhbCgpCi0gICAgJiYgIGZTY2FubmVyLT5nZXRJbkV4Y2VwdGlvbigpKQorICAgICYmICAhZlNjYW5uZXItPmdldEluRXhjZXB0aW9uKCkpCiAgICAgewogICAgICAgICB0aHJvdyB0b0VtaXQ7CiAgICAgfQogfQogCi12b2lkIFhNTFZhbGlkYXRvcjo6ZW1pdEVycm9yKCBjb25zdCAgIFhNTDRDVmFsaWQ6OkNvZGVzICAgdG9FbWl0Cit2b2lkIFhNTFZhbGlkYXRvcjo6ZW1pdEVycm9yKGNvbnN0ICBYTUw0Q1ZhbGlkOjpDb2RlcyAgIHRvRW1pdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgWE1MQ2gqIGNvbnN0ICAgICAgICB0ZXh0MQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgWE1MQ2gqIGNvbnN0ICAgICAgICB0ZXh0MgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgWE1MQ2gqIGNvbnN0ICAgICAgICB0ZXh0MwpAQCAtMTc1LDcgKzIwMyw3IEBACiAKICAgICAgICAgLy8gTG9jayB0aGUgbXV0ZXggYW5kIGxvYWQgdGhlIHRleHQKICAgICAgICAgewotICAgICAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnVmFsaWRhdG9yTXV0ZXgpOworICAgICAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnVmFsaWRhdG9yTXV0ZXgoKSk7CiAgICAgICAgICAgICBpZiAoIWdldE1zZ0xvYWRlcigpLmxvYWRNc2codG9FbWl0LCBlcnJUZXh0LCBtYXhDaGFycywgdGV4dDEsIHRleHQyLCB0ZXh0MywgdGV4dDQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIDxUQkQ+IFNob3VsZCBwcm9iYWJseSBsb2FkIGEgZGVmYXVsdCBtZXNzYWdlIGhlcmUKQEAgLTIwNSwxNSArMjMzLDE1IEBACiAgICAgfQogCiAgICAgLy8gQmFpbCBvdXQgaWYgaXRzIGZhdGFsIGFuIHdlIGFyZSB0byBnaXZlIHVwIG9uIHRoZSBmaXJzdCBmYXRhbCBlcnJvcgotICAgIGlmIChYTUw0Q1ZhbGlkOjppc0ZhdGFsKHRvRW1pdCkKKyAgICBpZiAoKFhNTDRDVmFsaWQ6OmlzVmFsaWQodG9FbWl0KSB8fCBYTUw0Q1ZhbGlkOjppc0ZhdGFsKHRvRW1pdCkpCiAgICAgJiYgIGZTY2FubmVyLT5nZXRFeGl0T25GaXJzdEZhdGFsKCkKLSAgICAmJiAgZlNjYW5uZXItPmdldEluRXhjZXB0aW9uKCkpCisgICAgJiYgICFmU2Nhbm5lci0+Z2V0SW5FeGNlcHRpb24oKSkKICAgICB7CiAgICAgICAgIHRocm93IHRvRW1pdDsKICAgICB9CiB9CiAKLXZvaWQgWE1MVmFsaWRhdG9yOjplbWl0RXJyb3IoIGNvbnN0ICAgWE1MNENWYWxpZDo6Q29kZXMgICB0b0VtaXQKK3ZvaWQgWE1MVmFsaWRhdG9yOjplbWl0RXJyb3IoY29uc3QgIFhNTDRDVmFsaWQ6OkNvZGVzICAgdG9FbWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCBjaGFyKiBjb25zdCAgICAgICAgIHRleHQxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCBjaGFyKiBjb25zdCAgICAgICAgIHRleHQyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCBjaGFyKiBjb25zdCAgICAgICAgIHRleHQzCkBAIC0yMzAsNyArMjU4LDcgQEAKIAogICAgICAgICAvLyBMb2NrIHRoZSBtdXRleCBhbmQgbG9hZCB0aGUgdGV4dAogICAgICAgICB7Ci0gICAgICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdWYWxpZGF0b3JNdXRleCk7CisgICAgICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdWYWxpZGF0b3JNdXRleCgpKTsKICAgICAgICAgICAgIGlmICghZ2V0TXNnTG9hZGVyKCkubG9hZE1zZyh0b0VtaXQsIGVyclRleHQsIG1heENoYXJzLCB0ZXh0MSwgdGV4dDIsIHRleHQzLCB0ZXh0NCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gPFRCRD4gU2hvdWxkIHByb2JhYmx5IGxvYWQgYSBkZWZhdWx0IG1lc3NhZ2UgaGVyZQpAQCAtMjYwLDkgKzI4OCw5IEBACiAgICAgfQogCiAgICAgLy8gQmFpbCBvdXQgaWYgaXRzIGZhdGFsIGFuIHdlIGFyZSB0byBnaXZlIHVwIG9uIHRoZSBmaXJzdCBmYXRhbCBlcnJvcgotICAgIGlmIChYTUw0Q1ZhbGlkOjppc0ZhdGFsKHRvRW1pdCkKKyAgICBpZiAoKFhNTDRDVmFsaWQ6OmlzVmFsaWQodG9FbWl0KSB8fCBYTUw0Q1ZhbGlkOjppc0ZhdGFsKHRvRW1pdCkpCiAgICAgJiYgIGZTY2FubmVyLT5nZXRFeGl0T25GaXJzdEZhdGFsKCkKLSAgICAmJiAgZlNjYW5uZXItPmdldEluRXhjZXB0aW9uKCkpCisgICAgJiYgICFmU2Nhbm5lci0+Z2V0SW5FeGNlcHRpb24oKSkKICAgICB7CiAgICAgICAgIHRocm93IHRvRW1pdDsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJuYWwvTWFrZWZpbGUuaW4gYi9zcmMvaW50ZXJuYWwvTWFrZWZpbGUuaW4KaW5kZXggOTM2YmU5NC4uZmI2OGFiYSAxMDA2NDQKLS0tIGEvc3JjL2ludGVybmFsL01ha2VmaWxlLmluCisrKyBiL3NyYy9pbnRlcm5hbC9NYWtlZmlsZS5pbgpAQCAtNTUsMTYgKzU1LDMwIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6MDkgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8xNCAyMzo1MzoyMiAgcmFodWxqCisjIFJlbW92ZWQgdGhlIG9mZmVuZGluZyBDdHJsLU0ncyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorIyBsb2dzIHdoaWNoIHdhcyBnaXZpbmcgcGFja2FnaW5nIHByb2JsZW1zLgorIworIyBQUjoKKyMgT2J0YWluZWQgZnJvbToKKyMgU3VibWl0dGVkIGJ5OgorIyBSZXZpZXdlZCBieToKKyMKKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAxOjU5OjUxICByYWh1bGoKKyMgQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorIyBSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODowOSAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6NDIgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KLSM6CisjCiAjCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAotQ09NUElMRVIgPSBAY29tcGlsZXJACitDQyAgPSBAY2NACitDWFggPSBAY3h4QAogQ1hYRkxBR1MgPSBAY3h4ZmxhZ3NACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKQEAgLTEzMiw5ICsxNDYsNiBAQAogCUBmb3IgZmlsZSBpbiAkKElOVEVSTkFMX0NQUF9QVUJIRUFERVJTKTsgZG8gXAogCXJtIC1mICQoWE1MX0lOQ19ESVIpLyQoTU9EVUxFKS8kJGZpbGU7IFwKIAlkb25lCi0JQGZvciBmaWxlIGluICQoSU5URVJOQUxfQ19GSUxFUyk7IGRvIFwKLQlybSAtZiAkKFhNTF9JTkNfRElSKS8kKE1PRFVMRSkvJCRmaWxlOyBcCi0JZG9uZQogCUBlY2hvICJSZW1vdmluZyBhbGwgJChNT0RVTEUpIG9iamVjdCBmaWxlcyAuLi4iCiAJQGZvciBmaWxlIGluICQoSU5URVJOQUxfQ1BQX09CSkVDVFMpOyBkbyBcCiAJcm0gLWYgJChBTExfT0JKRUNUU19ESVIpLyQkZmlsZTsgXApkaWZmIC0tZ2l0IGEvc3JjL2ludGVybmFsL1hNTFNjYW5uZXIuY3BwIGIvc3JjL2ludGVybmFsL1hNTFNjYW5uZXIuY3BwCmluZGV4IDViMjhiNjkuLjc2NGJhZDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcm5hbC9YTUxTY2FubmVyLmNwcAorKysgYi9zcmMvaW50ZXJuYWwvWE1MU2Nhbm5lci5jcHAKQEAgLTU2LDggKzU2LDIxIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODoyMiAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTIvMDggMDA6MTU6MDYgIHJvZGRleQorICogU29tZSBzbWFsbCBsYXN0IG1pbnV0ZSBmaXhlcyB0byBnZXQgaW50byB0aGUgMy4wLjEgYnVpbGQgdGhhdCBpcyBnb2luZyB0byBiZQorICogZ29pbmcgb3V0IGFueXdheSBmb3IgcGxhdGZvcm0gZml4ZXMuCisgKgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzAyIDE5OjAyOjU3ICByb2RkZXkKKyAqIEdldCByaWQgb2YgYSBmZXcgc3RhdGljYWxseSBkZWZpbmVkIFhNTE11dGV4IG9iamVjdHMsIGFuZCBsYXp5IGV2YWwgdGhlbQorICogdXNpbmcgYXRvbWljIGNvbXBhcmUgYW5kIHN3YXAuIEkgc29tZWhvdyBsZXQgaXQgZ2V0IGJ5IG1lIHRoYXQgd2UgZG9uJ3QKKyAqIHdhbnQgYW55IHN0YXRpYy9nbG9iYWwgb2JqZWN0cyBhdCBhbGwuCisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIwOjIzOjEzICByb2RkZXkKKyAqIEFkZGVkIGNoYW5nZXMgdG8gaGFuZGxlIGV4Y2VwdGlvbnMgdGhyb3duIGZyb20gdGhlIHVzZXIncyBoYW5kbGVycyBmb3IKKyAqIGVtaXRFcnJvcigpLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6MjIgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS43ICAxOTk5LzExLzA4IDIwOjU2OjU0ICBkcm9kZGV5CiAgKiBJZiB0aGUgbWFpbiB4bWwgZW50aXR5IGRvZXMgbm90IGV4aXN0LCB3ZSBuZWVkIHRvIGdldCB0aGUgZXJyb3IgaGFuZGxpbmcgZm9yIHRoYXQKQEAgLTEwNSwxMSArMTE4LDM0IEBACiAvLyAgTG9jYWwgc3RhdGljIGRhdGEKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIFhNTFVJbnQzMiAgICAgICBnU2Nhbm5lcklkOwotc3RhdGljIFhNTE11dGV4ICAgICAgICBnU2Nhbm5lck11dGV4Owogc3RhdGljIFhNTE1zZ0xvYWRlciogICBnTXNnTG9hZGVyOwogCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIExvY2FsLCBzdGF0aWMgZnVuY3Rpb25zCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8KKy8vICBXZSBuZWVkIHRvIGZhdWx0IGluIHRoaXMgbXV0ZXguIEJ1dCwgc2luY2UgaXRzIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbgorLy8gIGl0c2VsZiwgd2UgaGF2ZSB0byBkbyB0aGlzIHRoZSBsb3cgbGV2ZWwgd2F5IHVzaW5nIGEgY29tcGFyZSBhbmQgc3dhcC4KKy8vCitzdGF0aWMgWE1MTXV0ZXgmIGdTY2FubmVyTXV0ZXgoKQoreworICAgIHN0YXRpYyBYTUxNdXRleCogc2Nhbm5lck11dGV4ID0gMDsKKyAgICBpZiAoIXNjYW5uZXJNdXRleCkKKyAgICB7CisgICAgICAgIFhNTE11dGV4KiB0bXBNdXRleCA9IG5ldyBYTUxNdXRleDsKKyAgICAgICAgaWYgKFhNTFBsYXRmb3JtVXRpbHM6OmNvbXBhcmVBbmRTd2FwKCh2b2lkKiopJnNjYW5uZXJNdXRleCwgdG1wTXV0ZXgsIDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTb21lb25lIGJlYXQgdXMgdG8gaXQsIHNvIGxldCdzIGNsZWFuIHVwIG91cnMKKyAgICAgICAgICAgIGRlbGV0ZSB0bXBNdXRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKnNjYW5uZXJNdXRleDsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBYTUxTY2FubmVyOiBDb25zdHJ1Y3RvcnMgYW5kIERlc3RydWN0b3IKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogWE1MU2Nhbm5lcjo6WE1MU2Nhbm5lcihYTUxWYWxpZGF0b3IqIGNvbnN0IHZhbGlkYXRvcikgOgpAQCAtMjQzLDIzICsyNzksMzcgQEAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGRvY3VtZW50IGhhbmRsZXIsIHRoZW4gY2FsbCB0aGUgZW5kIGRvY3VtZW50CiAgICAgICAgIGlmIChmRG9jSGFuZGxlcikKICAgICAgICAgICAgIGZEb2NIYW5kbGVyLT5lbmREb2N1bWVudCgpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSByZWFkZXIgbWFuYWdlciB0byBjbG9zZSBhbGwgZmlsZXMsIHNvY2tldHMsIGV0Yy4uLgorICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgfQogCisgICAgLy8KKyAgICAvLyAgTk9URToKKyAgICAvLworICAgIC8vICBJbiBhbGwgb2YgdGhlIGVycm9yIHByb2Nlc3NpbmcgYmVsb3csIHRoZSBlbWl0RXJyb3IoKSBjYWxsIE1VU1QgY29tZQorICAgIC8vICBiZWZvcmUgdGhlIGZsdXNoIG9mIHRoZSByZWFkZXIgbWdyLCBvciBpdCB3aWxsIGZhaWwgYmVjYXVzZSBpdCB0cmllcworICAgIC8vICB0byBmaW5kIG91dCB0aGUgcG9zaXRpb24gaW4gdGhlIFhNTCBzb3VyY2Ugb2YgdGhlIGVycm9yLgorICAgIC8vCiAgICAgY2F0Y2goY29uc3QgWE1MNENFcnJzOjpDb2RlcykKICAgICB7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSAnZmlyc3QgZmF0YWwgZXJyb3InIHR5cGUgZXhpdCwgc28ganVzdCBmYWxsIHRocm91Z2gKKyAgICAgICAgLy8gVGhpcyBpcyBhICdmaXJzdCBmYXRhbCBlcnJvcicgdHlwZSBleGl0LCBzbyByZXNldCBhbmQgZmFsbCB0aHJvdWdoCisgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICB9CiAKLSAgICAvLwotICAgIC8vICBXZSBoYXZlIHRvIHByb3BvZ2F0ZSBTQVggZXhjZXB0aW9ucy4gU2luY2UgdGhleSBhcmUgZGVyaXZlZCBmcm9tIG91cgotICAgIC8vICBYTUxFeGNlcHRpb24gY2xhc3MsIHdlIGhhdmUgdG8gZmlsdGVyIGl0IG91dCBmaXJzdCBoZXJlIHNvIHRoYXQgaXQKLSAgICAvLyAgZG9lcyBub3QgZ2V0IGNhdWdodCBhbmQgZWF0ZW4gYmVsb3cuCi0gICAgLy8KKyAgICBjYXRjaChjb25zdCBYTUw0Q1ZhbGlkOjpDb2RlcykKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSAnZmlyc3QgZmF0YWwgZXJyb3InIHR5cGUgZXhpdCwgc28gcmVzZXQgYW5kIGZhbGwgdGhyb3VnaAorICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CisgICAgfQorCiAgICAgY2F0Y2goY29uc3QgU0FYRXhjZXB0aW9uJikKICAgICB7CiAgICAgICAgIC8vCi0gICAgICAgIC8vICBNYWtlIHN1cmUgd2UgZG8gYW55dGhpbmcgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBkb25lIG9uIHRoZSB3YXkKLSAgICAgICAgLy8gIG91dCBvZiB0aGlzIG1ldGhvZC4KKyAgICAgICAgLy8gIFdlIGhhdmUgdG8gcHJvcG9nYXRlIFNBWCBleGNlcHRpb25zLgorICAgICAgICAvLworICAgICAgICAvLyAgTWFrZSBzdXJlIHRoYXQgdGhlIHJlYWRlciBtYW5hZ2VyIGdldHMgcmVzZXQsIHRoZW4gcmV0aHJvdyB0aGlzCisgICAgICAgIC8vICBleGNlcHRpb24gc2luY2UgaXQgbWVhbnMgbm90aGluZyBtdWNoIHRvIHVzLgogICAgICAgICAvLwogICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgICAgIHRocm93OwpAQCAtMjY3LDM1ICszMTcsMzggQEAKIAogICAgIGNhdGNoKGNvbnN0IFhNTEV4Y2VwdGlvbiYgZXhjVG9DYXRjaCkKICAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vICBFbWl0IHRoZSBlcnJvciBhbmQgY2F0Y2ggYW55IHVzZXIgZXhjZXB0aW9uIHRocm93biBmcm9tIGhlcmUuIE1ha2UKKyAgICAgICAgLy8gIHN1cmUgaW4gYWxsIGNhc2VzIHdlIGZsdXNoIHRoZSByZWFkZXIgbWFuYWdlci4KKyAgICAgICAgLy8KICAgICAgICAgZkluRXhjZXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgZW1pdEVycm9yCi0gICAgICAgICgKLSAgICAgICAgICAgIFhNTDRDRXJyczo6WE1MRXhjZXB0aW9uCi0gICAgICAgICAgICAsIGV4Y1RvQ2F0Y2guZ2V0VHlwZSgpCi0gICAgICAgICAgICAsIGV4Y1RvQ2F0Y2guZ2V0TWVzc2FnZSgpCi0gICAgICAgICk7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0RXJyb3IKKyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICBYTUw0Q0VycnM6OlhNTEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICwgZXhjVG9DYXRjaC5nZXRUeXBlKCkKKyAgICAgICAgICAgICAgICAsIGV4Y1RvQ2F0Y2guZ2V0TWVzc2FnZSgpCisgICAgICAgICAgICApOworICAgICAgICB9CiAKLSAgICAgICAgLy8gQW5kIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXRjaCguLi4pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZsdXNoIHRoZSByZWFkZXIgbWFuYWdlciBhbmQgcmV0aHJvdyB1c2VyJ3MgZXJyb3IKKyAgICAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKKyAgICAgICAgICAgIHRocm93OworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgaXQgcmV0dXJuZWQsIHRoZW4gcmVzZXQgdGhlIHJlYWRlciBtYW5hZ2VyIGFuZCBmYWxsIHRocm91Z2gKKyAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOwogICAgIH0KIAogICAgIGNhdGNoKC4uLikKICAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICBXZSBkb24ndCBrbm93IHdoYXQgaGFwcGVuZWQuIFNvIGlzc3VlIGFuIGVycm9yLCBmbHVzaCB0aGUgcmVhZGVyCi0gICAgICAgIC8vICBtYW5hZ2VyIHRvIGNsb3NlIGRvd24gZmlsZXMsIHNvY2tldHMsIGV0Yy4uLiBhbmQgcmV0aHJvdy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gIE5PVEU6IFRoZSBlcnJvciBlbWl0IE1VU1QgY29tZSBiZWZvcmUgdGhlIGZsdXNoIG9mIHRoZSByZWFkZXIKLSAgICAgICAgLy8gIG9yIGl0IHdpbGwgZmFpbCBiZWNhdXNlIGl0IHRyaWVzIHRvIGZpbmQgb3V0IHRoZSBwb3NpdGlvbiBpbgotICAgICAgICAvLyAgdGhlIFhNTCBzb3VyY2Ugb2YgdGhlIGVycm9yLgotICAgICAgICAvLwotICAgICAgICBmSW5FeGNlcHRpb24gPSB0cnVlOwotICAgICAgICBlbWl0RXJyb3IoWE1MNENFcnJzOjpTeXNFeGNlcHRpb24pOworICAgICAgICAvLyBSZXNldCBhbmQgcmV0aHJvdwogICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgICAgIHRocm93OwogICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSByZWFkZXIgbWFuYWdlciB0byBjbG9zZSBhbGwgZmlsZXMKLSAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiB9CiAKIApAQCAtMzMyLDEzICszODUsMjYgQEAKICAgICAgICAgc2NhblByb2xvZygpOwogICAgIH0KIAotICAgIC8vIFRoaXMgaXMgYSAnZmlyc3QgZmFpbHVyZScgZXhjZXB0aW9uIHNvIHJlc2V0IGFuZCByZXR1cm4gYSBmYWlsdXJlCisgICAgLy8KKyAgICAvLyAgTk9URToKKyAgICAvLworICAgIC8vICBJbiBhbGwgb2YgdGhlIGVycm9yIHByb2Nlc3NpbmcgYmVsb3csIHRoZSBlbWl0RXJyb3IoKSBjYWxsIE1VU1QgY29tZQorICAgIC8vICBiZWZvcmUgdGhlIGZsdXNoIG9mIHRoZSByZWFkZXIgbWdyLCBvciBpdCB3aWxsIGZhaWwgYmVjYXVzZSBpdCB0cmllcworICAgIC8vICB0byBmaW5kIG91dCB0aGUgcG9zaXRpb24gaW4gdGhlIFhNTCBzb3VyY2Ugb2YgdGhlIGVycm9yLgorICAgIC8vCiAgICAgY2F0Y2goY29uc3QgWE1MNENFcnJzOjpDb2RlcykKICAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSAnZmlyc3QgZmFpbHVyZScgZXhjZXB0aW9uIHNvIHJlc2V0IGFuZCByZXR1cm4gYSBmYWlsdXJlCiAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGNhdGNoKGNvbnN0IFhNTDRDVmFsaWQ6OkNvZGVzKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhICdmaXJzdCBmYXRhbCBlcnJvcicgdHlwZSBleGl0LCBzbyByZXNldCBhbmQgZmFsbCB0aHJvdWdoCisgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKKyAgICB9CisKICAgICAvLyBXZSBoYXZlIHRvIHByb3BvZ2F0ZSBTQVggZXhjZXB0aW9ucwogICAgIGNhdGNoKGNvbnN0IFNBWEV4Y2VwdGlvbiYpCiAgICAgewpAQCAtMzQ2LDI0ICs0MTIsMzggQEAKICAgICAgICAgdGhyb3c7CiAgICAgfQogCi0gICAgLy8gVGhpcyBvbmUgaXMganVzdCBhIGZhaWx1cmUKICAgICBjYXRjaChjb25zdCBYTUxFeGNlcHRpb24mIGV4Y1RvQ2F0Y2gpCiAgICAgeworICAgICAgICAvLworICAgICAgICAvLyAgRW1pdCB0aGUgZXJyb3IgYW5kIGNhdGNoIGFueSB1c2VyIGV4Y2VwdGlvbiB0aHJvd24gZnJvbSBoZXJlLiBNYWtlCisgICAgICAgIC8vICBzdXJlIGluIGFsbCBjYXNlcyB3ZSBmbHVzaCB0aGUgcmVhZGVyIG1hbmFnZXIuCisgICAgICAgIC8vCiAgICAgICAgIGZJbkV4Y2VwdGlvbiA9IHRydWU7Ci0gICAgICAgIGVtaXRFcnJvcgotICAgICAgICAoCi0gICAgICAgICAgICBYTUw0Q0VycnM6OlhNTEV4Y2VwdGlvbgotICAgICAgICAgICAgLCBleGNUb0NhdGNoLmdldFR5cGUoKQotICAgICAgICAgICAgLCBleGNUb0NhdGNoLmdldE1lc3NhZ2UoKQotICAgICAgICApOworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEVycm9yCisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgWE1MNENFcnJzOjpYTUxFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAsIGV4Y1RvQ2F0Y2guZ2V0VHlwZSgpCisgICAgICAgICAgICAgICAgLCBleGNUb0NhdGNoLmdldE1lc3NhZ2UoKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfSAgICAKKworICAgICAgICBjYXRjaCguLi4pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IGFuZCByZXRocm93IHRoZSB1c2VyIGVycm9yCisgICAgICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CisgICAgICAgICAgICB0aHJvdzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlc2V0IGFuZCByZXR1cm4gYSBmYWlsdXJlCiAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGNhdGNoKC4uLikKICAgICB7Ci0gICAgICAgIGZJbkV4Y2VwdGlvbiA9IHRydWU7Ci0gICAgICAgIGVtaXRFcnJvcihYTUw0Q0VycnM6OlN5c0V4Y2VwdGlvbik7CisgICAgICAgIC8vIFJlc2V0IGFuZCByZXRocm93IG9yaWdpbmFsIGVycm9yCiAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICAgICAgdGhyb3c7CiAgICAgfQpAQCAtNDUxLDQzICs1MzEsNzQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFRoaXMgaXMgYSAnZmlyc3QgZmFpbHVyZScgZXhjZXB0aW9uLCBzbyByZXNldCBhbmQgcmV0dXJuIGZhaWx1cmUKKyAgICAvLworICAgIC8vICBOT1RFOgorICAgIC8vCisgICAgLy8gIEluIGFsbCBvZiB0aGUgZXJyb3IgcHJvY2Vzc2luZyBiZWxvdywgdGhlIGVtaXRFcnJvcigpIGNhbGwgTVVTVCBjb21lCisgICAgLy8gIGJlZm9yZSB0aGUgZmx1c2ggb2YgdGhlIHJlYWRlciBtZ3IsIG9yIGl0IHdpbGwgZmFpbCBiZWNhdXNlIGl0IHRyaWVzCisgICAgLy8gIHRvIGZpbmQgb3V0IHRoZSBwb3NpdGlvbiBpbiB0aGUgWE1MIHNvdXJjZSBvZiB0aGUgZXJyb3IuCisgICAgLy8KICAgICBjYXRjaChjb25zdCBYTUw0Q0VycnM6OkNvZGVzKQogICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhICdmaXJzdCBmYWlsdXJlJyBleGNlcHRpb24sIHNvIHJlc2V0IGFuZCByZXR1cm4gZmFpbHVyZQogICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBjYXRjaChjb25zdCBYTUw0Q1ZhbGlkOjpDb2RlcykKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSAnZmlyc3QgZmF0YWwgZXJyb3InIHR5cGUgZXhpdCwgc28gcmVzZXQgYW5kIGZhbGwgdGhyb3VnaAorICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CisgICAgfQorCiAgICAgLy8gV2UgaGF2ZSB0byBwcm9wb2dhdGUgU0FYIGV4Y2VwdGlvbnMKICAgICBjYXRjaChjb25zdCBTQVhFeGNlcHRpb24mKQogICAgIHsKKyAgICAgICAgLy8gSnVzdCByZXNldCBvdXIgcmVhZGVyIG1hbmFnZXIgYW5kIHJldGhyb3cgU0FYIGV4Y2VwdGlvbgogICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgICAgIHRocm93OwogICAgIH0KIAotICAgIC8vIFRoaXMgb25lIGlzIGp1c3QgYSBmYWlsdXJlCiAgICAgY2F0Y2goY29uc3QgWE1MRXhjZXB0aW9uJiBleGNUb0NhdGNoKQogICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gIEVtaXQgdGhlIGVycm9yIGFuZCBjYXRjaCBhbnkgdXNlciBleGNlcHRpb24gdGhyb3duIGZyb20gaGVyZS4gTWFrZQorICAgICAgICAvLyAgc3VyZSBpbiBhbGwgY2FzZXMgd2UgZmx1c2ggdGhlIHJlYWRlciBtYW5hZ2VyLgorICAgICAgICAvLwogICAgICAgICBmSW5FeGNlcHRpb24gPSB0cnVlOwotICAgICAgICBlbWl0RXJyb3IKLSAgICAgICAgKAotICAgICAgICAgICAgWE1MNENFcnJzOjpYTUxFeGNlcHRpb24KLSAgICAgICAgICAgICwgZXhjVG9DYXRjaC5nZXRUeXBlKCkKLSAgICAgICAgICAgICwgZXhjVG9DYXRjaC5nZXRNZXNzYWdlKCkKLSAgICAgICAgKTsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRFcnJvcgorICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgIFhNTDRDRXJyczo6WE1MRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgLCBleGNUb0NhdGNoLmdldFR5cGUoKQorICAgICAgICAgICAgICAgICwgZXhjVG9DYXRjaC5nZXRNZXNzYWdlKCkKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KIAorICAgICAgICBjYXRjaCguLi4pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJFc2V0IGFuZCByZXRocm93IHVzZXIgZXJyb3IKKyAgICAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKKyAgICAgICAgICAgIHRocm93OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzZXQgYW5kIHJldHVybiBmYWlsdXJlCiAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGNhdGNoKC4uLikKICAgICB7Ci0gICAgICAgIGZJbkV4Y2VwdGlvbiA9IHRydWU7Ci0gICAgICAgIGVtaXRFcnJvcihYTUw0Q0VycnM6OlN5c0V4Y2VwdGlvbik7Ci0KKyAgICAgICAgLy8gUmVzZXQgYW5kIHJldGhyb3cgb3JpZ2luYWwgZXJyb3IKICAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOwogICAgICAgICB0aHJvdzsKICAgICB9CisKKyAgICAvLyBJZiB3ZSBoaXQgdGhlIGVuZCwgdGhlbiBmbHVzaCB0aGUgcmVhZGVyIG1hbmFnZXIKKyAgICBpZiAoIXJldFZhbCkKKyAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOworCiAgICAgcmV0dXJuIHJldFZhbDsKIH0KIApAQCAtNTA5LDcgKzYyMCw3IEBACiAgICAgLy8gIHVzZSB0aGUgbXV0ZXggdG8gcHJvdGVjdCBpdC4KICAgICAvLwogICAgIHsKLSAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnU2Nhbm5lck11dGV4KTsKKyAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnU2Nhbm5lck11dGV4KCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgbG9hZGVkIG91ciBtZXNzYWdlIHlldCwgdGhlbiBkbyB0aGF0CiAgICAgICAgIGlmICghZ01zZ0xvYWRlcikKQEAgLTU3Myw3ICs2ODQsNyBAQAogCiAgICAgICAgIC8vIExvY2sgdGhlIG11dGV4IGFuZCBsb2FkIHRoZSB0ZXh0CiAgICAgICAgIHsKLSAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1NjYW5uZXJNdXRleCk7CisgICAgICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdTY2FubmVyTXV0ZXgoKSk7CiAgICAgICAgICAgICBpZiAoIWdNc2dMb2FkZXItPmxvYWRNc2codG9FbWl0LCBlcnJUZXh0LCBtc2dTaXplKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyA8VEJEPiBQcm9iYWJseSBzaG91bGQgbG9hZCBhIGRlZmF1bHQgbXNnIGhlcmUKQEAgLTYyNCw3ICs3MzUsNyBAQAogCiAgICAgICAgIC8vIExvY2sgdGhlIG11dGV4IGFuZCBsb2FkIHRoZSB0ZXh0CiAgICAgICAgIHsKLSAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1NjYW5uZXJNdXRleCk7CisgICAgICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdTY2FubmVyTXV0ZXgoKSk7CiAgICAgICAgICAgICBpZiAoIWdNc2dMb2FkZXItPmxvYWRNc2codG9FbWl0LCBlcnJUZXh0LCBtYXhDaGFycywgdGV4dDEsIHRleHQyLCB0ZXh0MywgdGV4dDQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIDxUQkQ+IFNob3VsZCBwcm9iYWJseSBsb2FkIGEgZGVmYXVsdCBtZXNzYWdlIGhlcmUKQEAgLTY3NSw3ICs3ODYsNyBAQAogCiAgICAgICAgIC8vIExvY2sgdGhlIG11dGV4IGFuZCBsb2FkIHRoZSB0ZXh0CiAgICAgICAgIHsKLSAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1NjYW5uZXJNdXRleCk7CisgICAgICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdTY2FubmVyTXV0ZXgoKSk7CiAgICAgICAgICAgICBpZiAoIWdNc2dMb2FkZXItPmxvYWRNc2codG9FbWl0LCBlcnJUZXh0LCBtYXhDaGFycywgdGV4dDEsIHRleHQyLCB0ZXh0MywgdGV4dDQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIDxUQkQ+IFNob3VsZCBwcm9iYWJseSBsb2FkIGEgZGVmYXVsdCBtZXNzYWdlIGhlcmUKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcm5hbC9YTUxTY2FubmVyMi5jcHAgYi9zcmMvaW50ZXJuYWwvWE1MU2Nhbm5lcjIuY3BwCmluZGV4IGIzNmFlYTEuLjI4MzQyYmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcm5hbC9YTUxTY2FubmVyMi5jcHAKKysrIGIvc3JjL2ludGVybmFsL1hNTFNjYW5uZXIyLmNwcApAQCAtNTYsOCArNTYsMTIgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjI0ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wOCAwMDoxNTowNyAgcm9kZGV5CisgKiBTb21lIHNtYWxsIGxhc3QgbWludXRlIGZpeGVzIHRvIGdldCBpbnRvIHRoZSAzLjAuMSBidWlsZCB0aGF0IGlzIGdvaW5nIHRvIGJlCisgKiBnb2luZyBvdXQgYW55d2F5IGZvciBwbGF0Zm9ybSBmaXhlcy4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjI0ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNiAgMTk5OS8xMS8wOCAyMDo1Njo1NSAgZHJvZGRleQogICogSWYgdGhlIG1haW4geG1sIGVudGl0eSBkb2VzIG5vdCBleGlzdCwgd2UgbmVlZCB0byBnZXQgdGhlIGVycm9yIGhhbmRsaW5nIGZvciB0aGF0CkBAIC0yMjksMTEgKzIzMywxNSBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgWE1MQnVmZmVyIGJ1ZlVSSTsKICAgICAgICAgICAgICAgICAgICAgZlZhbGlkYXRvci0+Z2V0VVJJVGV4dCh1cmlJZCwgYnVmVVJJKTsKKyAgICAgICAgICAgICAgICAgICAgWE1MQnVmZmVyIGJ1Zk1zZzsKKyAgICAgICAgICAgICAgICAgICAgYnVmTXNnLmFwcGVuZChjaE9wZW5DdXJseSk7CisgICAgICAgICAgICAgICAgICAgIGJ1Zk1zZy5hcHBlbmQoYnVmVVJJLmdldFJhd0J1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmTXNnLmFwcGVuZChjaENsb3NlQ3VybHkpOworICAgICAgICAgICAgICAgICAgICBidWZNc2cuYXBwZW5kKHN1ZmZQdHIpOwogICAgICAgICAgICAgICAgICAgICBmVmFsaWRhdG9yLT5lbWl0RXJyb3IKICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgWE1MNENWYWxpZDo6QXR0Tm90RGVmaW5lZEZvckVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICwgYnVmVVJJLmdldFJhd0J1ZmZlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAsIHN1ZmZQdHIKKyAgICAgICAgICAgICAgICAgICAgICAgICwgYnVmTXNnLmdldFJhd0J1ZmZlcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAsIGVsZW1EZWNsLmdldEZ1bGxOYW1lKCkKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvcGFyc2Vycy9NYWtlZmlsZS5pbiBiL3NyYy9wYXJzZXJzL01ha2VmaWxlLmluCmluZGV4IDZmODRkMWIuLjU4ZGU4NWUgMTAwNjQ0Ci0tLSBhL3NyYy9wYXJzZXJzL01ha2VmaWxlLmluCisrKyBiL3NyYy9wYXJzZXJzL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwyMSBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjUwICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMTQgMjM6NTM6MjMgIHJhaHVsagorIyBSZW1vdmVkIHRoZSBvZmZlbmRpbmcgQ3RybC1NJ3MgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UKKyMgbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyMKKyMgUFI6CisjIE9idGFpbmVkIGZyb206CisjIFN1Ym1pdHRlZCBieToKKyMgUmV2aWV3ZWQgYnk6CisjCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo1OTo1NiAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KKyMgUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6NTAgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjUzICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02NCw3ICs3Nyw4IEBACiAjCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAotQ09NUElMRVIgPSBAY29tcGlsZXJACitDQyAgPSBAY2NACitDWFggPSBAY3h4QAogQ1hYRkxBR1MgPSBAY3h4ZmxhZ3NACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKQEAgLTExNyw5ICsxMzEsNiBAQAogCUBmb3IgZmlsZSBpbiAkKFBBUlNFUlNfQ1BQX1BVQkhFQURFUlMpOyBkbyBcCiAJcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAogCWRvbmUKLQlAZm9yIGZpbGUgaW4gJChQQVJTRVJTX0NfRklMRVMpOyBkbyBcCi0Jcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAotCWRvbmUKIAlAZWNobyAiUmVtb3ZpbmcgYWxsICQoTU9EVUxFKSBvYmplY3QgZmlsZXMgLi4uIgogCUBmb3IgZmlsZSBpbiAkKFBBUlNFUlNfQ1BQX09CSkVDVFMpOyBkbyBcCiAJcm0gLWYgJChBTExfT0JKRUNUU19ESVIpLyQkZmlsZTsgXApkaWZmIC0tZ2l0IGEvc3JjL3J1bkNvbmZpZ3VyZSBiL3NyYy9ydW5Db25maWd1cmUKaW5kZXggMzkxZDhkNC4uYmEwZWYzMiAxMDA3NTUKLS0tIGEvc3JjL3J1bkNvbmZpZ3VyZQorKysgYi9zcmMvcnVuQ29uZmlndXJlCkBAIC01OCw4ICs1OCw3NCBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAyOjU3ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjExICAxOTk5LzEyLzE0IDIzOjUzOjE4ICByYWh1bGoKKyMgUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisjIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjEwICAxOTk5LzEyLzA5IDAwOjQ4OjE5ICBhcnVuYTEKKyMgSUNVIGxpYnJhcnkgaW5jbHVzaW9uIGluIEFMTExJQlMgZHVlIHRvIHNvbGFyaXMgZmFpbHVyZQorIworIyBSZXZpc2lvbiAxLjkgIDE5OTkvMTIvMDMgMDE6MTk6MTEgIHJhaHVsagorIyBTcGxpdCBleHBvcnQgc3RhdGVtZW50cyBpbnRvIHR3by4gYXNzaWdubWVudCBhbmQgdGhlbiBleHBvcnQuIFNvbGFyaXMgaXMgaGFwcHkgbm93CisjCisjIFJldmlzaW9uIDEuOCAgMTk5OS8xMi8wMiAxODoxMDo1MSAgZGlya3gKKyMgQ2hhbmdlZCBleGl0IGNvZGVzIGZyb20gLTEgdG8gJzEnLiBBZGRlZCBpbmRpcmVjdGlvbi4KKyMKKyMgRGF0ZTogVGh1LCAyIERlYyAxOTk5IDE3OjQ3OjM5ICswMDAwCisjIEZyb206IEpvbmF0aGFuIE1jRG93ZWxsIDxub29kbGVzQGVhcnRoLmxpPgorIyBSZXBseS1UbzogeGVyY2VzLWRldkB4bWwuYXBhY2hlLm9yZworIyBUbzogeGVyY2VzLWRldkB4bWwuYXBhY2hlLm9yZywgcmFodWxqQGFwYWNoZS5vcmcKKyMgU3ViamVjdDogUmU6IHJ1bkNvbmZpZ3VyZSBzY3JpcHQgJiBiYXNoCisjCisjCisjIE9uIE1vbiwgTm92IDI5LCAxOTk5IGF0IDEwOjI5OjEzQU0gLTA4MDAsIFJhaHVsIEphaW4gd3JvdGU6CisjCisjID4gPiBJJ20gcXVpdGUgaGFwcHkgdG8gcHJvZHVjZSBhIHBhdGNoIHRoYXQgbWFrZXMgaXQgd29yayB1bmRlciBib3RoCisjID4gPiBGcmVlQlNEJ3Mgc2ggYW5kIGJhc2ggLSBJIHdvdWxkIGFzc3VtZSB0aGlzIHdvdWxkIHdvcmsgdW5kZXIgbW9zdCBzaAorIyA+ID4gbGlrZSBzaGVsbHMuCisjID4gUGxlYXNlIHBvc3QgdGhlIGNoYW5nZXMgZm9yIEZyZWVCU0QgYW5kIEkgd2lsbCB0ZXN0IHRoZSBjaGFuZ2VzIG9uCisjID4gb3RoZXIgdW5peCdzIGFuZCBkbyB0aGUgaW50ZWdyYXRpb24uCisjCisjIEkgc2F0IGRvd24gdG8gZG8gdGhpcyB0b2RheSBhbmQgZm91bmQgdGhhdCBpdCBjYW4gYmUgdHJpdmlhbGx5IGZpeGVkIGJ5CisjIGNoYW5naW5nIGFsbCB0aGUgImV4aXQgLTEiIGluc3RhbmNlcyB0byAiZXhpdCAxIiAtIGl0IHNlZW1zIHRoZSAvYmluL3NoCisjIHdpdGggRnJlZUJTRCBkb2Vzbid0IGxpa2UgbmVnYXRpdmUgcmVzdWx0IGNvZGVzLiBJdCBzZWVtcyBhIGJpdAorIyBwb2ludGxlc3MgdG8gc3VibWl0IGEgcGF0Y2ggZm9yIHRoaXMsIHNvIGNhbiBzb21lb25lIHdpdGggQ1ZTIGFjY2VzcworIyBjaGFuZ2UgdGhpcyBwbGVhc2U/CisjCisjIEouCisjCisjIC0tCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjcgIDE5OTkvMTIvMDEgMTc6MTY6MTYgIHJhaHVsagorIyBBZGRlZCBzdXBwb3J0IGZvciBJUklYIDYuNS41IHVzaW5nIFNHSSBNSVBTcHJvIEMrKyA3LjMgYW5kIDcuMjEgZ2VuZXJhdGluZyAzMiBiaXQgb2JqZWN0cy4gQ2hhbmdlcyBzdWJtaXR0ZWQgYnkgTWFyYyBTdHVlc3NlbAorIworIyBSZXZpc2lvbiAxLjYgIDE5OTkvMTEvMjQgMjM6MjE6NDIgIHJhaHVsagorIyBOb3cgd29ya3MgdW5kZXIgSFBVWCAxMC4yMCB3aXRoIENDIGFuZCBhQ0MsIHdpdGggSUNVIGFuZCBuYXRpdmUKKyMgZGlzdGNsZWFuIHRhcmdldCBub3cgcmVtb3ZlIGFuZCByZW1haW5pbmcgTWFrZWZpbGUocykKKyMgY2xlYW4gdGFyZ2V0IG5vdyByZW1vdmVzIHRoZSB0ZW1wbGF0ZSByZXBvc2l0b3J5IGRpcmVjdG9yeQorIworIyBSZXZpc2lvbiAxLjUgIDE5OTkvMTEvMjMgMDE6NTk6MzMgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCisjIFJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMTcgMjI6MzY6MzMgIHJhaHVsagorIyBDb2RlIHdvcmtzIHdpdGggSUNVIHRyYW5zY29kaW5nIHNlcnZpY2UKKyMKKyMgUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM4OjUwICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDI6NTcgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQ0OjA5ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02NywyMCArMTMzLDMwIEBACiAjCiAKICMKLSMgcnVuQ29uZmlndXJlIDogVGhpcyBzY3JpcHQgd2lsbCBydW4gdGhlICJjb25maWd1cmUiIHNjcmlwdCBmb3IgdGhlIGFwcHJvcHJpYXRlIHBsYXRmb3JtCi0jIE9ubHkgc3VwcG9ydGVkIHBsYXRmb3JtcyBhcmUgcmVjb2duaXplZAorIyBydW5Db25maWd1cmU6CisjICAgIFRoaXMgc2NyaXB0IHdpbGwgcnVuIHRoZSAiY29uZmlndXJlIiBzY3JpcHQgZm9yIHRoZSBhcHByb3ByaWF0ZQorIyAgICBwbGF0Zm9ybS4gT25seSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGFyZSByZWNvZ25pemVkLgorIworIyBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCBhbmQgZXhwb3J0ZWQgYXQgdGhlIGVuZCBvZiB0aGlzCisjIHNjcmlwdC4KKyMKKyMgTElCUworIyBMREZMQUdTCisjIENYWEZMQUdTCisjIFRSQU5TQ09ERVIKKyMKIAogdXNhZ2UoKQogewogICAgIGVjaG8gInJ1bkNvbmZpZ3VyZTogSGVscGVyIHNjcmlwdCB0byBydW4gXCJjb25maWd1cmVcIiBmb3Igb25lIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIgogICAgIGVjaG8gIlVzYWdlOiBydW5Db25maWd1cmUgXCJvcHRpb25zXCIiCiAgICAgZWNobyAiICAgICAgIHdoZXJlIG9wdGlvbnMgbWF5IGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOiIKLSAgICBlY2hvICIgICAgICAgLXAgPHBsYXRmb3JtPiAoYWNjZXB0cyAnYWl4JywgJ2xpbnV4JywgJ3NvbGFyaXMnLCAnaHAtMTAnLCAnaHAtMTEnKSIKLSAgICBlY2hvICIgICAgICAgLWMgPEMgY29tcGlsZXIgbmFtZT4gKGUuZy4gZ2NjIG9yIHhsYykiCi0gICAgZWNobyAiICAgICAgIC14IDxDKysgY29tcGlsZXIgbmFtZT4gKGUuZy4gZysrIG9yIHhsQykiCisgICAgZWNobyAiICAgICAgIC1wIDxwbGF0Zm9ybT4gKGFjY2VwdHMgJ2FpeCcsICdsaW51eCcsICdzb2xhcmlzJywgJ2hwLTEwJywgJ2hwLTExJywgJ2lyaXgnKSIKKyAgICBlY2hvICIgICAgICAgLWMgPEMgY29tcGlsZXIgbmFtZT4gKGUuZy4gZ2NjLCBjYywgeGxjKSIKKyAgICBlY2hvICIgICAgICAgLXggPEMrKyBjb21waWxlciBuYW1lPiAoZS5nLiBnKyssIENDLCB4bEMpIgogICAgIGVjaG8gIiAgICAgICAtZCAoc3BlY2lmaWVzIHRoYXQgeW91IHdhbnQgdG8gYnVpbGQgZGVidWcgdmVyc2lvbikiCi0gICAgZWNobyAiICAgICAgIC1tIDxtZXNzYWdlIGxvYWRlcj4gY2FuIGJlICdpbm1lbScsICdpY3UnIG9yICdpY29udiciCi0gICAgZWNobyAiICAgICAgIC1uIDxuZXQgYWNjZXNzb3I+IGNhbiBiZSAnZmlsZW9ubHknIG9yICdsaWJ3d3cnIgorICAgIGVjaG8gIiAgICAgICAtbSA8bWVzc2FnZSBsb2FkZXI+IGNhbiBiZSAnaW5tZW0nLCAnaWN1JywgJ2ljb252JyIKKyAgICBlY2hvICIgICAgICAgLW4gPG5ldCBhY2Nlc3Nvcj4gY2FuIGJlICdmaWxlb25seScsICdsaWJ3d3cnIgogICAgIGVjaG8gIiAgICAgICAtdCA8dHJhbnNjb2Rlcj4gY2FuIGJlICdpY3UnIG9yICduYXRpdmUnIgogICAgIGVjaG8gIiAgICAgICAtciA8dGhyZWFkIG9wdGlvbj4gY2FuIGJlICdwdGhyZWFkJyBvciAnZGNlJyAob25seSB1c2VkIG9uIEhQLTExKSIKICAgICBlY2hvICIgICAgICAgLWwgPGV4dHJhIGxpbmtlciBvcHRpb25zPiIKQEAgLTg4LDI0ICsxNjQsMjYgQEAKICAgICBlY2hvICIgICAgICAgLWggKHRvIGdldCBoZWxwIG9uIHRoZSBhYm92ZSBjb21tYW5kcykiCiB9CiAKK0VSUk9SX0VYSVRfQ09ERT0xCisKIGlmIHRlc3QgJHsxfW8gPSAibyI7IHRoZW4KICAgIHVzYWdlCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAotaWYgdGVzdCAke1hNTDRDUk9PVH1vID0gIm8iOyB0aGVuCi0gICBlY2hvIEVSUk9SIDogWW91IGhhdmUgbm90IHNldCB5b3VyIFhNTDRDUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZQoraWYgdGVzdCAke1hFUkNFU0NST09UfW8gPSAibyI7IHRoZW4KKyAgIGVjaG8gRVJST1IgOiBZb3UgaGF2ZSBub3Qgc2V0IHlvdXIgWEVSQ0VTQ1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUKICAgIGVjaG8gVGhvdWdoIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjcmVhdGluZyBtYWtlZmlsZXMsCiAgICBlY2hvIHRoaXMgaXMganVzdCBhIGdlbmVyYWwgd2FybmluZyB0byBwcmV2ZW50IHlvdSBmcm9tIHBpdGZhbGxzIGluIGZ1dHVyZS4gUGxlYXNlCi0gICBlY2hvIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgWE1MNENST09UIHRvIGluZGljYXRlIHdoZXJlIHlvdSBpbnN0YWxsZWQKLSAgIGVjaG8gdGhlIFhNTDRDIGZpbGVzLCBhbmQgcnVuIHRoaXMgY29tbWFuZCBhZ2FpbiB0byBwcm9jZWVkLiBTZWUgdGhlIGRvY3VtZW50YXRpb24KKyAgIGVjaG8gc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBYRVJDRVNDUk9PVCB0byBpbmRpY2F0ZSB3aGVyZSB5b3UgaW5zdGFsbGVkCisgICBlY2hvIHRoZSBYRVJDRVMtQyBmaWxlcywgYW5kIHJ1biB0aGlzIGNvbW1hbmQgYWdhaW4gdG8gcHJvY2VlZC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uCiAgICBlY2hvIGZvciBhbiBleGFtcGxlIGlmIHlvdSBhcmUgc3RpbGwgY29uZnVzZWQuCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAogaWYgdGVzdCAkMSA9ICItaCI7IHRoZW4KICAgIHVzYWdlCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAogIyBHZXQgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCkBAIC0xMTMsMTMgKzE5MSwxMyBAQAogaWYgWyAkPyAhPSAwIF0KICAgIHRoZW4KICAgIHVzYWdlCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAogIyBTZXQgdXAgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBlYWNoIHBhcmFtZXRlcgogZGVidWc9b2ZmICAgICAgICAgICAgICAgICMgYnkgZGVmYXVsdCBkZWJ1ZyBpcyBvZmYKIHRyYW5zY29kZXI9bmF0aXZlICAgICAgICAjIGJ5IGRlZmF1bHQgdXNlIG5hdGl2ZSB0cmFuc2NvZGVyCi1tc2dsb2FkZXI9aWNvbnYgICAgICAgICAgIyBieSBkZWZhdWx0IHVzZSBuYXRpdmUgdHJhbnNjb2RlcgorbXNnbG9hZGVyPWlubWVtICAgICAgICAgICMgYnkgZGVmYXVsdCB1c2UgbmF0aXZlIHRyYW5zY29kZXIKIG5ldGFjY2Vzc29yPWZpbGVvbmx5ICAgICAjIGJ5IGRlZmF1bHQgdXNlIGZpbGVvbmx5CiAKIGZvciBpIGluICQqCkBAIC0xNTcsNyArMjM1LDcgQEAKICAgIAogICAgLWgpIAogICAgICAgICB1c2FnZQotICAgICAgICBleGl0IC0xOzsgCisgICAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OzsgCiAgICAKICAgIC0tKSAKICAgICAgICAgc2hpZnQ7IGJyZWFrOzsgCkBAIC0xNzAsMTQ5ICsyNDgsMTk1IEBACiBlY2hvICJDKysgQ29tcGlsZXI6ICRjcHBjb21waWxlciIKIGVjaG8gIkV4dHJhIGNvbXBpbGUgb3B0aW9uczogJGNvbXBpbGVyb3B0aW9uIgogZWNobyAiRXh0cmEgbGluayBvcHRpb25zOiAkbGlua2Vyb3B0aW9uIgotaWYgdGVzdCAkZGVidWcgPSAib2ZmIjsgdGhlbgotICAgIGVjaG8gIkRlYnVnIGlzIE9GRiIKLSAgICBkZWJ1Z2ZsYWc9Ii13IC1PIjsKLWVsc2UKLSAgICBlY2hvICJEZWJ1ZyBpcyBPTiIKLSAgICBkZWJ1Z2ZsYWc9Ii1nIjsKLWZpCiBlY2hvICJNZXNzYWdlIExvYWRlcjogJG1zZ2xvYWRlciIKIGVjaG8gIk5ldCBBY2Nlc3NvcjogJG5ldGFjY2Vzc29yIgogZWNobyAiVHJhbnNjb2RlcjogJHRyYW5zY29kZXIiCiBlY2hvICJUaHJlYWQgb3B0aW9uOiAkdGhyZWFkIgogCisKKyMKICMgTm93IGNoZWNrIGlmIHRoZSBvcHRpb25zIGFyZSBjb3JyZWN0IG9yIG5vdCwgYmFpbCBvdXQgaWYgaW5jb3JyZWN0CisjCisKIGNhc2UgJHBsYXRmb3JtIGluCi0gICBhaXggfCBsaW51eCB8IHNvbGFyaXMgfCBocC0xMCB8IGhwLTExKQorICAgYWl4IHwgbGludXggfCBzb2xhcmlzIHwgaHAtMTAgfCBocC0xMSB8IGlyaXgpCiAgICAgICAgIyBwbGF0Zm9ybSBoYXMgYmVlbiByZWNvZ25pemVkCiAgICAgICAgOzsKICAgICopCiAgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIHBsYXRmb3JtICckcGxhdGZvcm0nLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgZXhpdCAtMTs7CisgICAgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfTs7CiBlc2FjCiAKLSMgTm93IGNoZWNrIGZvciB0aGUgdHJhbnNjb2RlcgotdHJhbnNjb2Rlcm9wdGlvbj0iLURYTUxfVVNFX05BVElWRV9UUkFOU0NPREVSIgorCisjCisjIEVuYWJsZSBkZWJ1Z2dpbmcgb3Igbm90Li4uCisjCisKK2lmIHRlc3QgJGRlYnVnID0gIm9mZiI7IHRoZW4KKyAgICBlY2hvICJEZWJ1ZyBpcyBPRkYiCisgICAgZGVidWdmbGFnPSItTyI7CitlbHNlCisgICAgZWNobyAiRGVidWcgaXMgT04iCisgICAgZGVidWdmbGFnPSItZyI7CitmaQorCisKKworIworIyBDaGVjayBmb3IgdGhlIHRocmVhZGluZyBvcHRpb24gb25seSBmb3IgaHAtMTEKKyMKKwordGhyZWFkaW5nTGlicz0iLWxwdGhyZWFkIgoraWYgdGVzdCAkcGxhdGZvcm0gPSAiaHAtMTEiOyB0aGVuCisgICAgaWYgdGVzdCAkdGhyZWFkOyB0aGVuCisgICAgY2FzZSAkdGhyZWFkIGluCisgICAgICAgcHRocmVhZCkKKyAgICAgICAgICAgOzsKKyAgICAKKyAgICAgICBkY2UpCisgICAgICAgICAgIHRocmVhZGluZ0xpYnM9Ii1sY21hIjsKKyAgICAgICAgICAgdGhyZWFkaW5nRGVmaW5lcz0iLURfUFRIUkVBRFNfRFJBRlQ0IC1EWE1MX1VTRV9EQ0UiIDs7CisgICAgCisgICAgICAgKikKKyAgICAgICAgICAgZWNobyAiSSBkbyBub3QgcmVjb2duaXplIHRoZSB0aHJlYWQgb3B0aW9uICckdGhyZWFkJy4gUGxlYXNlIHR5cGUgJyR7MH0gLWgnIGZvciBoZWxwLiIKKyAgICAgICAgICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX07OworICAgIGVzYWMKKyAgICBmaQorZWxpZiB0ZXN0ICRwbGF0Zm9ybSA9ICJhaXgiOyB0aGVuCisgICAgdGhyZWFkaW5nTGlicz0iLWxwdGhyZWFkcyIKK2VsaWYgdGVzdCAkcGxhdGZvcm0gPSAiaHAtMTAiOyB0aGVuCisgICAgdGhyZWFkaW5nTGlicz0iLWxjbWEiCisgICAgdGhyZWFkaW5nRGVmaW5lcz0iLURYTUxfVVNFX0RDRSIKK2ZpCisKKworIworIyBOb3cgY2hlY2sgZm9yIHdoYXQga2luZCBvZiB0cmFuc2NvZGluZyBzZXJ2aWNlIGlzIGRlc2lyZWQuCisjCisKK3RyYW5zY29kaW5nRGVmaW5lcz0iLURYTUxfVVNFX05BVElWRV9UUkFOU0NPREVSIgogVFJBTlNDT0RFUj1OQVRJVkUKIAogaWYgdGVzdCAkdHJhbnNjb2RlcjsgdGhlbgogY2FzZSAkdHJhbnNjb2RlciBpbgogICAgaWN1KQotICAgICAgIHRyYW5zY29kZXJvcHRpb249Ii1EWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUiIgOwotICAgICAgIFRSQU5TQ09ERVI9SUNVIDs7CisgICAgICAgaWYgdGVzdCAteiAkSUNVUk9PVDsgdGhlbgorICAgICAgICAgICBlY2hvICcqKipFcnJvcioqKiBJQ1VST09UIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBkZWZpbmVkLiBFeGl0aW5nLi4uJzsKKyAgICAgICAgICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX07CisgICAgICAgZmkKKyAgICAgICB0cmFuc2NvZGluZ0RlZmluZXM9Ii1EWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUiAtSSR7SUNVUk9PVH0vaW5jbHVkZSI7CisgICAgICAgdHJhbnNjb2RpbmdMaWJzPSItTCR7SUNVUk9PVH0vbGliIjsKKyAgICAgICBUUkFOU0NPREVSPUlDVTs7CiAKICAgIG5hdGl2ZSkKLSAgICAgICB0cmFuc2NvZGVyb3B0aW9uPSItRFhNTF9VU0VfTkFUSVZFX1RSQU5TQ09ERVIiIDsKLSAgICAgICBUUkFOU0NPREVSPU5BVElWRSA7OworICAgICAgIDs7CiAKICAgICopCiAgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIHRyYW5zY29kZXIgb3B0aW9uICckdHJhbnNjb2RlcicuIFBsZWFzZSB0eXBlICckezB9IC1oJyBmb3IgaGVscC4iCi0gICAgICBleGl0IC0xOzsKKyAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OzsKIGVzYWMKIGZpCiAKIGV4cG9ydCBUUkFOU0NPREVSCiAKKworIwogIyBOb3cgY2hlY2sgZm9yIHRoZSBtZXNzYWdlIGxvYWRlcgotTUVTU0FHRUxPQURFUj1JTk1FTTsgICAjIEJ5IGRlZmF1bHQgdXNlIGluLW1lbW9yeQotbXNnbG9hZGVyb3B0aW9uPSItRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUiIKKyMKKworTUVTU0FHRUxPQURFUj1JTk1FTSAgICAgICAgICMgQnkgZGVmYXVsdCB1c2UgaW4tbWVtb3J5Cittc2dsb2FkZXJEZWZpbmVzPSItRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUiIKIAogaWYgdGVzdCAkbXNnbG9hZGVyIDsgdGhlbgogY2FzZSAkbXNnbG9hZGVyIGluCiAgICBpY3UpCisgICAgICAgaWYgdGVzdCAteiAkSUNVUk9PVCA7IHRoZW4KKyAgICAgICAgICAgZWNobyAnKioqRXJyb3IqKiogSUNVUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3QgZGVmaW5lZC4gRXhpdGluZy4uLic7CisgICAgICAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OworICAgICAgIGZpCiAgICAgICAgTUVTU0FHRUxPQURFUj1JQ1U7Ci0gICAgICAgbXNnbG9hZGVyb3B0aW9uPSItRFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIiIDs7CisgICAgICAgbXNnbG9hZGVyRGVmaW5lcz0iLURYTUxfVVNFX0lDVV9NRVNTQUdFTE9BREVSIiA7OwogCiAgICBpbm1lbSkKLSAgICAgICBNRVNTQUdFTE9BREVSPUlOTUVNOwotICAgICAgIG1zZ2xvYWRlcm9wdGlvbj0iLURYTUxfVVNFX0lOTUVNX01FU1NBR0VMT0FERVIiIDs7CisgICAgICAgOzsKIAogICAgaWNvbnYpCiAgICAgICAgTUVTU0FHRUxPQURFUj1JQ09OVjsKLSAgICAgICBtc2dsb2FkZXJvcHRpb249Ii1EWE1MX1VTRV9JQ09OVl9NRVNTQUdFTE9BREVSIiA7OworICAgICAgIG1zZ2xvYWRlckRlZmluZXM9Ii1EWE1MX1VTRV9JQ09OVl9NRVNTQUdFTE9BREVSIiA7OwogCiAgICAqKQotICAgICAgZWNobyAiSSBkbyBub3QgcmVjb2duaXplIHRoZSBtZXNzYWdlIGxvYWRlciBvcHRpb24gJyRtc2dsb2FkZXInLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgZXhpdCAtMTs7CisgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIG1lc3NhZ2UgbG9hZGVyIG9wdGlvbiAnJG1zZ2xvYWRlcicuIFBsZWFzZSB0eXBlICckezB9IC1oJyBmb3IgaGVscC4iOworICAgICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX07OwogZXNhYwogZmkKIAogZXhwb3J0IE1FU1NBR0VMT0FERVIKIAotIyBDaGVjayBmb3IgdGhlIHRocmVhZGluZyBvcHRpb24gb25seSBmb3IgaHAtMTEKLWlmIHRlc3QgJHBsYXRmb3JtID0gImhwLTExIjsgdGhlbgotICAgIGlmIHRlc3QgJHRocmVhZDsgdGhlbgotICAgIGNhc2UgJHRocmVhZCBpbgotICAgICAgIHB0aHJlYWQpCi0gICAgICAgICAgIHRocmVhZGluZ29wdGlvbj0iLURYTUxfVVNFX1BUSFJFQUQiIDs7Ci0gICAgCi0gICAgICAgZGNlKQotICAgICAgICAgICB0aHJlYWRpbmdvcHRpb249Ii1EWE1MX1VTRV9EQ0UiIDs7Ci0gICAgCi0gICAgICAgKikKLSAgICAgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIHRocmVhZCBvcHRpb24gJyR0aHJlYWQnLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgICAgIGV4aXQgLTE7OwotICAgIGVzYWMKLSAgICBlbHNlCi0gICAgICAgICAgZWNobyAiWW91IG11c3QgcHJvdmlkZSBhIHRocmVhZCBvcHRpb24gZm9yIEhQVVgtMTEiLiBDYW5ub3QgcHJvY2VlZCBhbnkgZnVydGhlci4KLSAgICAgICAgICBleGl0IC0xOwotICAgIGZpCisKKworCisjCisjIENoZWNrIGZvciB0aGUgdHlwZSBvZiBuZXQgYWNjZXNzb3IKKyMKKworVVNFTElCV1dXPTA7ICAgICAgICAgICAgICAgICAgICMgQnkgZGVmYXVsdCB1c2UgZmlsZS1vbmx5CitpZiB0ZXN0ICRuZXRhY2Nlc3NvciA7IHRoZW4KK2Nhc2UgJG5ldGFjY2Vzc29yIGluCisgICBmaWxlb25seSkKKyAgICAgICBuZXRhY2Nlc3NvckRlZmluZXM9IiIgOzsKKworICAgbGlid3d3KQorICAgICAgIGlmIHRlc3QgLXogJHtMSUJXV1dST09UfSA7IHRoZW4KKyAgICAgICAgICAgZWNobyAiWW91IGhhdmUgbm90IGRlZmluZWQgeW91ciBMSUJXV1dST09UIGVudmlyb25tZW50IHZhcmlhYmxlLiBDYW5ub3QgcHJvY2VlZCBmdXJ0aGVyIC4uLiIKKyAgICAgICAgICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX07CisgICAgICAgZmkKKyAgICAgICBuZXRhY2Nlc3NvckRlZmluZXM9Ii1EWE1MX1VTRV9ORVRBQ0NFU1NPUl9MSUJXV1cgLUkke0xJQldXV1JPT1R9L2luY2x1ZGUiIDsKKyAgICAgICBuZXRhY2Nlc3NvckxpYnM9Ii1MJHtMSUJXV1dST09UfS9saWIgLWx3d3ciOworICAgICAgIFVTRUxJQldXVz0xOzsgCisKKyAgICopCisgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIG5ldGFjY2Vzc29yIG9wdGlvbiAnJG5ldGFjY2Vzc29yJy4gUGxlYXNlIHR5cGUgJyR7MH0gLWgnIGZvciBoZWxwLiIKKyAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OzsKK2VzYWMKIGZpCiAKK2V4cG9ydCBVU0VMSUJXV1cKKworCisKKyMKICMgU2V0IHRoZSBDIGNvbXBpbGVyIGFuZCBDKysgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzCi1DQz0kY2NvbXBpbGVyOyBleHBvcnQgQ0MKLUNYWD0kY3BwY29tcGlsZXI7IGV4cG9ydCBDWFgKKyMKIAogY2FzZSAkY3BwY29tcGlsZXIgaW4KLSAgIHhsQyB8IHhsYyB8IHhsQ19yIHwgeGxjX3IpCi0gICAgICAgTERGTEFHUz0iLWxDIjsgZXhwb3J0IExERkxBR1MKLSAgICAgICBMSUJTPSItTC91c3IvbHBwL3hsQy9saWIiOyBleHBvcnQgTElCUyA7OwotCi0gICBnKysgfCBjKyspCi0gICAgICAgTERGTEFHUz0iLWxjIjsgZXhwb3J0IExERkxBR1MKLSAgICAgICBMSUJTPSItTC91c3IvbG9jYWwvbGliIjsgZXhwb3J0IExJQlMgOzsKLQotICAgY2MgfCBDQykKLSAgICAgICBMREZMQUdTPSItbEMiOyBleHBvcnQgTERGTEFHUwotICAgICAgIExJQlM9Ii1ML3Vzci9saWIgLUwvdXNyL2Njcy9saWIiOyBleHBvcnQgTElCUyA7OwotCi0gICBhY2MgfCBhQ0MpCi0gICAgICAgTERGTEFHUz0iLWxDIjsgZXhwb3J0IExERkxBR1MKLSAgICAgICBMSUJTPSItTC91c3IvbGliIC1ML29wdC9hQ0MvbGliIjsgZXhwb3J0IExJQlMgOzsKKyAgIHhsQyB8IHhsYyB8IHhsQ19yIHwgeGxjX3IgfCBnKysgfCBjKysgfCBjYyB8IENDIHwgYUNDKQorICAgICAgOzsKIAogICAgKikKICAgICAgIGVjaG8gIkkgZG8gbm90IHJlY29nbml6ZSB0aGUgQysrIGNvbXBpbGVyICckY3BwY29tcGlsZXInLiBDb250aW51aW5nIGFueXdheSAuLi4iIAogICAgICAgOzsKIGVzYWMKIAotVVNFTElCV1dXPTA7ICAgIyBCeSBkZWZhdWx0IHVzZSBmaWxlLW9ubHkKLSMgQ2hlY2sgZm9yIHRoZSB0eXBlIG9mIG5ldCBhY2Nlc3NvcgotaWYgdGVzdCAkbmV0YWNjZXNzb3IgOyB0aGVuCi1jYXNlICRuZXRhY2Nlc3NvciBpbgotICAgZmlsZW9ubHkpCi0gICAgICAgbmV0YWNjZXNzb3JvcHRpb249IiIgOzsKK0NDPSIkY2NvbXBpbGVyIgorZXhwb3J0IENDCiAKLSAgIGxpYnd3dykKLSAgICAgICBpZiB0ZXN0IC16ICR7TElCV1dXUk9PVH0gOyB0aGVuCi0gICAgICAgICAgIGVjaG8gIllvdSBoYXZlIG5vdCBkZWZpbmVkIHlvdXIgTElCV1dXUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQ2Fubm90IHByb2NlZWQgZnVydGhlciAuLi4iCi0gICAgICAgICAgIGV4aXQgLTE7Ci0gICAgICAgZmkKLSAgICAgICBuZXRhY2Nlc3Nvcm9wdGlvbj0iLURYTUxfVVNFX05FVEFDQ0VTU09SX0xJQldXVyAtSSR7TElCV1dXUk9PVH0vaW5jbHVkZSIgOwotICAgICAgIExJQlM9IiRMSUJTIC1MJHtMSUJXV1dST09UfS9saWIgLWx3d3ciOwotICAgICAgIFVTRUxJQldXVz0xOzsgCitDWFg9IiRjcHBjb21waWxlciIKK2V4cG9ydCBDWFgKIAotICAgKikKLSAgICAgIGVjaG8gIkkgZG8gbm90IHJlY29nbml6ZSB0aGUgbmV0YWNjZXNzb3Igb3B0aW9uICckbmV0YWNjZXNzb3InLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgZXhpdCAtMTs7Ci1lc2FjCi1maQogCi1leHBvcnQgVVNFTElCV1dXOwotCisjCiAjIFNldCB0aGUgZXh0cmEgQyBhbmQgQysrIGNvbXBpbGVyIGZsYWdzCi1DWFhGTEFHUz0iJGRlYnVnZmxhZyAkY29tcGlsZXJvcHRpb24gJHRyYW5zY29kZXJvcHRpb24gJG1zZ2xvYWRlcm9wdGlvbiAkdGhyZWFkaW5nb3B0aW9uICRuZXRhY2Nlc3Nvcm9wdGlvbiI7IGV4cG9ydCBDWFhGTEFHUwotQ0ZMQUdTPSIkZGVidWdmbGFnICRjb21waWxlcm9wdGlvbiAkdHJhbnNjb2Rlcm9wdGlvbiAkbXNnbG9hZGVyb3B0aW9uICR0aHJlYWRpbmdvcHRpb24gJG5ldGFjY2Vzc29yb3B0aW9uIjsgZXhwb3J0IENGTEFHUworIworCitDWFhGTEFHUz0iJGRlYnVnZmxhZyAkdHJhbnNjb2RpbmdEZWZpbmVzICRtc2dsb2FkZXJEZWZpbmVzICR0aHJlYWRpbmdEZWZpbmVzICRuZXRhY2Nlc3NvckRlZmluZXMiCitleHBvcnQgQ1hYRkxBR1MKKworQ0ZMQUdTPSIkZGVidWdmbGFnICR0cmFuc2NvZGluZ0RlZmluZXMgJG1zZ2xvYWRlckRlZmluZXMgJHRocmVhZGluZ0RlZmluZXMgJG5ldGFjY2Vzc29yRGVmaW5lcyIKK2V4cG9ydCBDRkxBR1MKKworTElCUz0iJHRyYW5zY29kaW5nTGlicyAkdGhyZWFkaW5nTGlicyAkbmV0YWNjZXNzb3JMaWJzIgorZXhwb3J0IExJQlMKKwogCiBlY2hvCiBybSAtZiBjb25maWcuY2FjaGUKQEAgLTMyMiw3ICs0NDYsNyBAQAogCiBlY2hvCiBlY2hvIElmIHRoZSByZXN1bHQgb2YgdGhlIGFib3ZlIGNvbW1hbmRzIGxvb2sgT0sgdG8geW91LCBnbyB0byB0aGUgZGlyZWN0b3J5Ci1lY2hvICR7WE1MNENST09UfS9zcmMgYW5kIHR5cGUgXCJtYWtlXCIgdG8gbWFrZSB0aGUgWE1MNEMgc3lzdGVtLgorZWNobyAke1hFUkVDU0NST09UfS9zcmMgYW5kIHR5cGUgXCJtYWtlXCIgdG8gbWFrZSB0aGUgWEVSRUNTLUMgc3lzdGVtLgogCi1leGl0IDA7CitleGl0ICAwOwogCmRpZmYgLS1naXQgYS9zcmMvc2F4L01ha2VmaWxlLmluIGIvc3JjL3NheC9NYWtlZmlsZS5pbgppbmRleCBhMWVhM2FiLi44NWRlNmNiIDEwMDY0NAotLS0gYS9zcmMvc2F4L01ha2VmaWxlLmluCisrKyBiL3NyYy9zYXgvTWFrZWZpbGUuaW4KQEAgLTU1LDE2ICs1NSwzMCBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjQ2ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMTQgMjM6NTM6MjMgIHJhaHVsagorIyBSZW1vdmVkIHRoZSBvZmZlbmRpbmcgQ3RybC1NJ3MgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UKKyMgbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyMKKyMgUFI6CisjIE9idGFpbmVkIGZyb206CisjIFN1Ym1pdHRlZCBieToKKyMgUmV2aWV3ZWQgYnk6CisjCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo1OTo1OSAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KKyMgUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDYgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ1OjAxICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCi0jOgorIwogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACkBAIC0xMjcsOSArMTQxLDYgQEAKIAlAZm9yIGZpbGUgaW4gJChTQVhfQ1BQX1BVQkhFQURFUlMpOyBkbyBcCiAJcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAogCWRvbmUKLQlAZm9yIGZpbGUgaW4gJChTQVhfQ19GSUxFUyk7IGRvIFwKLQlybSAtZiAkKFhNTF9JTkNfRElSKS8kKE1PRFVMRSkvJCRmaWxlOyBcCi0JZG9uZQogCUBlY2hvICJSZW1vdmluZyBhbGwgJChNT0RVTEUpIG9iamVjdCBmaWxlcyAuLi4iCiAJQGZvciBmaWxlIGluICQoU0FYX0NQUF9PQkpFQ1RTKTsgZG8gXAogCXJtIC1mICQoQUxMX09CSkVDVFNfRElSKS8kJGZpbGU7IFwKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0F1dG9TZW5zZS5ocHAgYi9zcmMvdXRpbC9BdXRvU2Vuc2UuaHBwCmluZGV4IDMyOTUwNjIuLjViMDg3ZDYgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0F1dG9TZW5zZS5ocHAKKysrIGIvc3JjL3V0aWwvQXV0b1NlbnNlLmhwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAzOjU1ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMSAxNzoxNjoxNiAgcmFodWxqCisgKiBBZGRlZCBzdXBwb3J0IGZvciBJUklYIDYuNS41IHVzaW5nIFNHSSBNSVBTcHJvIEMrKyA3LjMgYW5kIDcuMjEgZ2VuZXJhdGluZyAzMiBiaXQgb2JqZWN0cy4gQ2hhbmdlcyBzdWJtaXR0ZWQgYnkgTWFyYyBTdHVlc3NlbAorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDM6NTUgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjAzICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjksNyArNzIsNyBAQAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBUaGlzIHNlY3Rpb24gYXR0ZW1wdHMgdG8gYXV0byBkZXRlY3QgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIEl0IHdpbGwgc2V0Ci0vLyAgdXAgWE1MNEMgc3BlY2lmaWMgZGVmaW5lcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBjb2RlLgorLy8gIHVwIFhlcmNlc0Mgc3BlY2lmaWMgZGVmaW5lcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBjb2RlLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgZGVmaW5lZChfQUlYKQogICAgICNkZWZpbmUgWE1MX0FJWApAQCAtODUsNiArODgsOSBAQAogI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCiAgICAgI2RlZmluZSBYTUxfTElOVVgKICAgICAjZGVmaW5lIFhNTF9VTklYCisjZWxpZiBkZWZpbmVkKElSSVgpCisgICAgI2RlZmluZSBYTUxfSVJJWAorICAgICNkZWZpbmUgWE1MX1VOSVgKICNlbGlmIGRlZmluZWQoX19NVlNfXykKICAgICAjZGVmaW5lIFhNTF9PRTM5MAogICAgICNkZWZpbmUgWE1MX1VOSVgKQEAgLTE0OSw2ICsxNTUsOCBAQAogICAgICNlbGlmIChfX2NwbHVzcGx1cyA9PSAxOTk3MDcgfHwgX19jcGx1c3BsdXMgPT0gMTk5NzExKQogICAgICAgICAjZGVmaW5lIFhNTF9IUFVYX2FDQwogICAgICNlbmRpZgorI2VsaWYgZGVmaW5lZChYTUxfSVJJWCkKKyAgICAjZGVmaW5lIFhNTF9NSVBTUFJPX0NDCiAjZWxpZiBkZWZpbmVkKFhNTF9UQU5ERU0pCiAgICAgI2RlZmluZSBYTUxfVEFOREVNQ0MKICNlbGlmIGRlZmluZWQoX19saW51eF9fKQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL0JvcmxhbmRDRGVmcy5ocHAgYi9zcmMvdXRpbC9Db21waWxlcnMvQm9ybGFuZENEZWZzLmhwcAppbmRleCA3YzYwODI5Li4yMzE0YTY2IDEwMDY0NAotLS0gYS9zcmMvdXRpbC9Db21waWxlcnMvQm9ybGFuZENEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvQm9ybGFuZENEZWZzLmhwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjI4ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMiAxOTowMjo1NyAgcm9kZGV5CisgKiBHZXQgcmlkIG9mIGEgZmV3IHN0YXRpY2FsbHkgZGVmaW5lZCBYTUxNdXRleCBvYmplY3RzLCBhbmQgbGF6eSBldmFsIHRoZW0KKyAqIHVzaW5nIGF0b21pYyBjb21wYXJlIGFuZCBzd2FwLiBJIHNvbWVob3cgbGV0IGl0IGdldCBieSBtZSB0aGF0IHdlIGRvbid0CisgKiB3YW50IGFueSBzdGF0aWMvZ2xvYmFsIG9iamVjdHMgYXQgYWxsLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MjggIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjIyICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtOTUsMyArMTAwLDEwIEBACiAjaWZkZWYgX0RFQlVHCiAjZGVmaW5lIFhNTDRDX0RFQlVHCiAjZW5kaWYKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBUaGUgbmFtZSBvZiB0aGUgRExMIGFzIGJ1aWx0IGJ5IHRoZSBCb3JsYW5kIHByb2plY3RzLiBBdCB0aGlzIHRpbWUsIGl0CisvLyAgZG9lcyBub3QgdXNlIHRoZSB2ZXJzaW9uaW5nIHN0dWZmLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gIlhlcmNlc0xpYjsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9DU2V0RGVmcy5ocHAgYi9zcmMvdXRpbC9Db21waWxlcnMvQ1NldERlZnMuaHBwCmluZGV4IGZmZGIzZjIuLmExNGZmNzIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0NvbXBpbGVycy9DU2V0RGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0NTZXREZWZzLmhwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjMxICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8xMiAyMDozNjo1MSAgcmFodWxqCisgKiBDaGFuZ2VkIGxpYnJhcnkgbmFtZSB0byB4ZXJjZXMtYy5saWIuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzozMSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MjIgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMjMsNCArMTI2LDQgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFRoZSBuYW1lIG9mIHRoZSBETEwgdGhhdCBpcyBidWlsdCBieSB0aGUgQ1NldCBDKysgdmVyc2lvbiBvZiB0aGUgc3lzdGVtLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gImxpYklYWE1MNEMiOworY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJ4ZXJjZXMtYyI7CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Db21waWxlcnMvQ29kZVdhcnJpb3JEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9Db2RlV2FycmlvckRlZnMuaHBwCmluZGV4IGMyYmJjYzMuLmFhZmVhMTIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0NvbXBpbGVycy9Db2RlV2FycmlvckRlZnMuaHBwCisrKyBiL3NyYy91dGlsL0NvbXBpbGVycy9Db2RlV2FycmlvckRlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MjkgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM2OjUzICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjI5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NToyMiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTExMiw0ICsxMTUsNCBAQAogLy8gIHZlcnNpb25pbmcgc3RyaW5nLiBUaGlzIGlzIGRlZmluZWQgaW4gWE1MNENEZWZzLmhwcCB3aGljaCBpcyB3aGF0IHRoaXMKIC8vICBmaWxlIGlzIGluY2x1ZGVkIGludG8uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAiSVhYTUw0QyIgWE1MNENfRExMVmVyc2lvblN0cjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAieGVyY2VzLWMiIFhNTDRDX0RMTFZlcnNpb25TdHI7CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Db21waWxlcnMvR0NDRGVmcy5ocHAgYi9zcmMvdXRpbC9Db21waWxlcnMvR0NDRGVmcy5ocHAKaW5kZXggNzNjMGMzOC4uM2UyMGYyNyAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0dDQ0RlZnMuaHBwCisrKyBiL3NyYy91dGlsL0NvbXBpbGVycy9HQ0NEZWZzLmhwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjMyICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8xMiAyMDozNjo1NCAgcmFodWxqCisgKiBDaGFuZ2VkIGxpYnJhcnkgbmFtZSB0byB4ZXJjZXMtYy5saWIuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzozMiAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDU6MjMgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMTcsNCArMTIwLDQgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFRoZSBuYW1lIG9mIHRoZSBETEwgdGhhdCBpcyBidWlsdCBieSB0aGUgR0NDIHZlcnNpb24gb2YgdGhlIHN5c3RlbS4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJJWFhNTDRDIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGlieGVyY2VzLWMiOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL0dOVUdEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9HTlVHRGVmcy5ocHAKaW5kZXggMjI3YmNiMi4uYWM3MTU5MiAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0dOVUdEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvR05VR0RlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM2OjU1ICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjMzICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NToyMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEwNiw0ICsxMDksNCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgVGhlIG5hbWUgb2YgdGhlIERMTCB0aGF0IGlzIGJ1aWx0IGJ5IHRoZSBHTlVHIHZlcnNpb24gb2YgdGhlIHN5c3RlbS4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJJWFhNTDRDIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGlieGVyY2VzLWMiOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL0hQQ0NEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9IUENDRGVmcy5ocHAKaW5kZXggNDJmN2E1NS4uODEyZTE1ZCAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0hQQ0NEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvSFBDQ0RlZnMuaHBwCkBAIC01Niw4ICs1NiwyNCBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzQgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS41ICAxOTk5LzEyLzE0IDIzOjUzOjI1ICByYWh1bGoKKyAqIFJlbW92ZWQgdGhlIG9mZmVuZGluZyBDdHJsLU0ncyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorICogbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyAqCisgKiBQUjoKKyAqIE9idGFpbmVkIGZyb206CisgKiBTdWJtaXR0ZWQgYnk6CisgKiBSZXZpZXdlZCBieToKKyAqCisgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMjMgMDI6MDA6MTIgIHJhaHVsagorICogQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorICogUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisgKgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM2OjU3ICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjM0ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NToyMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTg0LDYgKzEwMCwxNCBAQAogLy8gIERlZmluZSBvdXIgdmVyc2lvbiBvZiB0aGUgWE1MIGNoYXJhY3RlcgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFhNTENoOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVVEYxNkNoOworCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIERlZmluZSB1bnNpZ25lZCAxNiBhbmQgMzIgYml0cyBpbnRlZ2VycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBYTUxVSW50MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBYTUxVSW50MzI7CiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05NSwxNCArMTE5LDYgQEAKIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBGb3JjZSBvbiB0aGUgWE1MNEMgZGVidWcgdG9rZW4gaWYgaXQgd2FzIG9uIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgMAotI2RlZmluZSBYTUw0Q19ERUJVRwotI2VuZGlmCi0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgVGhlIG5hbWUgb2YgdGhlIERMTCB0aGF0IGlzIGJ1aWx0IGJ5IHRoZSBIUCBDQyB2ZXJzaW9uIG9mIHRoZSBzeXN0ZW0uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGliSVhYTUw0QyI7Citjb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gImxpYnhlcmNlcy1jIjsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9JQk1WQU9TMkRlZnMuaHBwIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBT1MyRGVmcy5ocHAKaW5kZXggYWU2YTMwOC4uNDE0ZWYxMCAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBT1MyRGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBT1MyRGVmcy5ocHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzozNSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6MzY6NTggIHJhaHVsagorICogQ2hhbmdlZCBsaWJyYXJ5IG5hbWUgdG8geGVyY2VzLWMubGliLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzUgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjI0ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTAyLDcgKzEwNSw3IEBACiAvLyAgdmVyc2lvbmluZyBzdHJpbmcuIFRoaXMgaXMgZGVmaW5lZCBpbiBYTUw0Q0RlZnMuaHBwIHdoaWNoIGlzIHdoYXQgdGhpcwogLy8gIGZpbGUgaXMgaW5jbHVkZWQgaW50by4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJWQU9YTUw0QyIgWE1MNENfRExMVmVyc2lvblN0cjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAiVkFPWEVSQ0VTQyIgWE1MNENfRExMVmVyc2lvblN0cjsKIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9JQk1WQVczMkRlZnMuaHBwIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBVzMyRGVmcy5ocHAKaW5kZXggNWQxZjRmZS4uZGRkYmVkOSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBVzMyRGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBVzMyRGVmcy5ocHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzozNiAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6MzY6NTkgIHJhaHVsagorICogQ2hhbmdlZCBsaWJyYXJ5IG5hbWUgdG8geGVyY2VzLWMubGliLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzYgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjI0ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTAzLDQgKzEwNiw0IEBACiAvLyAgdmVyc2lvbmluZyBzdHJpbmcuIFRoaXMgaXMgZGVmaW5lZCBpbiBYTUw0Q0RlZnMuaHBwIHdoaWNoIGlzIHdoYXQgdGhpcwogLy8gIGZpbGUgaXMgaW5jbHVkZWQgaW50by4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJWQVdYTUw0QyIgWE1MNENfRExMVmVyc2lvblN0cjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAiVkFXWEVSQ0VTQyIgWE1MNENfRExMVmVyc2lvblN0cjsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9NSVBTcHJvRGVmcy5jcHAgYi9zcmMvdXRpbC9Db21waWxlcnMvTUlQU3Byb0RlZnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMDNlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvTUlQU3Byb0RlZnMuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKiAKKyAqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAorICogcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIAorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKKyAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICogCisgKiA0LiBUaGUgbmFtZXMgIlhlcmNlcyIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCisgKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVcQGFwYWNoZS5vcmcuCisgKiAKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgd2FzCisgKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAorICogQnVzaW5lc3MgTWFjaGluZXMsIEluYy4sIGh0dHA6Ly93d3cuaWJtLmNvbSAuICBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICogb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCisgKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisgKi8KKworLyoqCisgKiAkTG9nJAorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzE0IDIzOjUzOjI1ICByYWh1bGoKKyAqIFJlbW92ZWQgdGhlIG9mZmVuZGluZyBDdHJsLU0ncyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorICogbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyAqCisgKiBQUjoKKyAqIE9idGFpbmVkIGZyb206CisgKiBTdWJtaXR0ZWQgYnk6CisgKiBSZXZpZXdlZCBieToKKyAqCisgKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTIvMDEgMTc6MTY6MTcgIHJhaHVsagorICogQWRkZWQgc3VwcG9ydCBmb3IgSVJJWCA2LjUuNSB1c2luZyBTR0kgTUlQU3BybyBDKysgNy4zIGFuZCA3LjIxIGdlbmVyYXRpbmcgMzIgYml0IG9iamVjdHMuIENoYW5nZXMgc3VibWl0dGVkIGJ5IE1hcmMgU3R1ZXNzZWwKKyAqCisgKi8KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbmNsdWRlcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSA8dXRpbC9Db21waWxlcnMvTUlQU3Byb0RlZnMuaHBwPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKworCitpbnQgc3RyaWNtcChjb25zdCBjaGFyKiBjb25zdCBzdHIxLCBjb25zdCBjaGFyKiBjb25zdCAgc3RyMikgCit7CisgICAgcmV0dXJuIHN0cmNhc2VjbXAoc3RyMSwgc3RyMik7Cit9CisKK2ludCBzdHJuaWNtcChjb25zdCBjaGFyKiBjb25zdCBzdHIxLCBjb25zdCBjaGFyKiBjb25zdCAgc3RyMiwgY29uc3QgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIGlmIChjb3VudCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdHJuY2FzZWNtcCggc3RyMSwgc3RyMiwgKHNpemVfdCljb3VudCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Db21waWxlcnMvTUlQU3Byb0RlZnMuaHBwIGIvc3JjL3V0aWwvQ29tcGlsZXJzL01JUFNwcm9EZWZzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzFkZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL01JUFNwcm9EZWZzLmhwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKKyAqIAorICogQ29weXJpZ2h0IChjKSAxOTk5IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCisgKiByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAKKyAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorICogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAorICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisgKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisgKiAKKyAqIDQuIFRoZSBuYW1lcyAiWGVyY2VzIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0CisgKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKKyAqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZVxAYXBhY2hlLm9yZy4KKyAqIAorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZCB3YXMKKyAqIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAxOTk5LCBJbnRlcm5hdGlvbmFsCisgKiBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiwgaHR0cDovL3d3dy5pYm0uY29tIC4gIEZvciBtb3JlIGluZm9ybWF0aW9uCisgKiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKKyAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqLworCisvKioKKyAqICRMb2ckCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMTQgMjM6NTM6MjUgIHJhaHVsagorICogUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisgKiBsb2dzIHdoaWNoIHdhcyBnaXZpbmcgcGFja2FnaW5nIHByb2JsZW1zLgorICoKKyAqIFBSOgorICogT2J0YWluZWQgZnJvbToKKyAqIFN1Ym1pdHRlZCBieToKKyAqIFJldmlld2VkIGJ5OgorICoKKyAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMi8wMSAxNzoxNjoxNyAgcmFodWxqCisgKiBBZGRlZCBzdXBwb3J0IGZvciBJUklYIDYuNS41IHVzaW5nIFNHSSBNSVBTcHJvIEMrKyA3LjMgYW5kIDcuMjEgZ2VuZXJhdGluZyAzMiBiaXQgb2JqZWN0cy4gQ2hhbmdlcyBzdWJtaXR0ZWQgYnkgTWFyYyBTdHVlc3NlbAorICoKKyAqLworCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVmaW5lIHRoZXNlIGF3YXkgZm9yIHRoaXMgcGxhdGZvcm0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBQTEFURk9STV9FWFBPUlQKKyNkZWZpbmUgUExBVEZPUk1fSU1QT1JUCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgRGVmaW5lIG91ciB2ZXJzaW9uIG9mIHRoZSBYTUwgY2hhcmFjdGVyCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgWE1MQ2g7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVURjE2Q2g7CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgRGVmaW5lIHVuc2lnbmVkIDE2IGFuZCAzMiBiaXRzIGludGVnZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFhNTFVJbnQxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIFhNTFVJbnQzMjsKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBQcm92aWRlIHByb3RvdHlwZXMgZm9yIHNvbWUgc3RyaW5nIG1ldGhvZHMgdGhhdCBhcmUgbm90IGFsd2F5cyBhdmFpbGFibGUKKy8vICBvbiBhbGwgcGxhdGZvcm1zLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgc3RyaWNtcChjb25zdCBjaGFyKiBjb25zdCBzdHIxLCBjb25zdCBjaGFyKiBjb25zdCAgc3RyMik7CitpbnQgc3RybmljbXAoY29uc3QgY2hhciogY29uc3Qgc3RyMSwgY29uc3QgY2hhciogY29uc3QgIHN0cjIsIGNvbnN0IHVuc2lnbmVkIGludCBjb3VudCk7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFRoZSBuYW1lIG9mIHRoZSBEU08gdGhhdCBpcyBidWlsdCBieSB0aGUgTUlQU3BybyBDKysgdmVyc2lvbiBvZiB0aGUKKy8vICBzeXN0ZW0uIFdlIGFwcGVuZCBhIHByZXZpb3VzbHkgZGVmaW5lZCB0b2tlbiB3aGljaCBob2xkcyB0aGUgRFNPCisvLyAgdmVyc2lvbmluZyBzdHJpbmcuIFRoaXMgaXMgZGVmaW5lZCBpbiBYTUw0Q0RlZnMuaHBwIHdoaWNoIGlzIHdoYXQgdGhpcworLy8gIGZpbGUgaXMgaW5jbHVkZWQgaW50by4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJ4ZXJjZXMtYyI7CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Db21waWxlcnMvTWFrZWZpbGUuaW4gYi9zcmMvdXRpbC9Db21waWxlcnMvTWFrZWZpbGUuaW4KaW5kZXggZmQ1MDNjOS4uNWM4OTQzMSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL01ha2VmaWxlLmluCisrKyBiL3NyYy91dGlsL0NvbXBpbGVycy9NYWtlZmlsZS5pbgpAQCAtNTUsMTYgKzU1LDMzIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzYgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuNCAgMTk5OS8xMi8xNCAyMzo1MzoyNSAgcmFodWxqCisjIFJlbW92ZWQgdGhlIG9mZmVuZGluZyBDdHJsLU0ncyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorIyBsb2dzIHdoaWNoIHdhcyBnaXZpbmcgcGFja2FnaW5nIHByb2JsZW1zLgorIworIyBQUjoKKyMgT2J0YWluZWQgZnJvbToKKyMgU3VibWl0dGVkIGJ5OgorIyBSZXZpZXdlZCBieToKKyMKKyMgUmV2aXNpb24gMS4zICAxOTk5LzEyLzAxIDE3OjE2OjE3ICByYWh1bGoKKyMgQWRkZWQgc3VwcG9ydCBmb3IgSVJJWCA2LjUuNSB1c2luZyBTR0kgTUlQU3BybyBDKysgNy4zIGFuZCA3LjIxIGdlbmVyYXRpbmcgMzIgYml0IG9iamVjdHMuIENoYW5nZXMgc3VibWl0dGVkIGJ5IE1hcmMgU3R1ZXNzZWwKKyMKKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAyOjAwOjEzICByYWh1bGoKKyMgQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorIyBSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzozNiAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MjQgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KLSM6CisjCiAjCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAotQ09NUElMRVIgPSBAY29tcGlsZXJACitDQyAgPSBAY2NACitDWFggPSBAY3h4QAogQ1hYRkxBR1MgPSBAY3h4ZmxhZ3NACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKQEAgLTkxLDI4ICsxMDgsMzIgQEAKIAlJQk1WQVczMkRlZnMuaHBwIFwKIAlTdW5DQ0RlZnMuaHBwIFwKIAlTdW5LYWlEZWZzLmhwcCBcCisgICAgTUlQU3Byb0RlZnMuaHBwIFwKIAlUYW5kZW1DQ0RlZnMuaHBwIFwKIAlWQ1BQRGVmcy5ocHAKIAogCi1pZmVxICgke0NPTVBJTEVSfSxDQykKK2lmZXEgKCR7Q1hYfSxDQykKICAgICBpZmVxICgke1BMQVRGT1JNfSxTT0xBUklTKQogICAgICAgICBDUFBfT0JKRUNUUyA9IFN1bkNDRGVmcy5vCiAgICAgZW5kaWYKICAgICBpZmVxICgke1BMQVRGT1JNfSxIUFVYKQogICAgICAgICBDUFBfT0JKRUNUUyA9IEhQQ0NEZWZzLm8KICAgICBlbmRpZgorICAgIGlmZXEgKCR7UExBVEZPUk19LElSSVgpCisgICAgICAgIENQUF9PQkpFQ1RTID0gTUlQU3Byb0RlZnMubworICAgIGVuZGlmCiBlbmRpZgotaWZlcSAoJHtDT01QSUxFUn0seGxDX3IpCitpZmVxICgke0NYWH0seGxDX3IpCiAgICAgQ1BQX09CSkVDVFMgPSBDU2V0RGVmcy5vCiBlbmRpZgotaWZlcSAoJHtDT01QSUxFUn0sZysrKQoraWZlcSAoJHtDWFh9LGcrKykKICAgICBDUFBfT0JKRUNUUyA9IEdDQ0RlZnMubwogZW5kaWYKLWlmZXEgKCR7Q09NUElMRVJ9LGFDQykKK2lmZXEgKCR7Q1hYfSxhQ0MpCiAJQ1BQX09CSkVDVFMgPSBIUENDRGVmcy5vCiBlbmRpZgotaWZlcSAoJHtDT01QSUxFUn0sYysrKQoraWZlcSAoJHtDWFh9LGMrKykKICAgICBpZmVxICgke1BMQVRGT1JNfSxPUzM5MCkKICAgICAgICAgQ1BQX09CSkVDVFMgPSBNVlNDUFBEZWZzLm8KICAgICBlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL1N1bkNDRGVmcy5ocHAgYi9zcmMvdXRpbC9Db21waWxlcnMvU3VuQ0NEZWZzLmhwcAppbmRleCA1NzBiZTZiLi44YTE3OWU5IDEwMDY0NAotLS0gYS9zcmMvdXRpbC9Db21waWxlcnMvU3VuQ0NEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvU3VuQ0NEZWZzLmhwcApAQCAtNTYsOCArNTYsMTggQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjM5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8xNyAyMTo0OTo0MiAgYWJhZ2NoaQorICogQWRkZWQgdGhlIGRlZmluaXRpb25zIG9mIFhNTFVJbnQxNiBhbmQgWE1MVUludDMyCisgKiBQUjoKKyAqIE9idGFpbmVkIGZyb206CisgKiBTdWJtaXR0ZWQgYnk6CisgKiBSZXZpZXdlZCBieToKKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6Mzc6MDAgIHJhaHVsagorICogQ2hhbmdlZCBsaWJyYXJ5IG5hbWUgdG8geGVyY2VzLWMubGliLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzkgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjI1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODMsNiArOTMsMTEgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBYTUxDaDsKIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgRGVmaW5lIHVuc2lnbmVkIDE2IGFuZCAzMiBiaXRzIGludGVnZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFhNTFVJbnQxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIFhNTFVJbnQzMjsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgRm9yY2Ugb24gdGhlIFhNTDRDIGRlYnVnIHRva2VuIGlmIGl0IHdhcyBvbiBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQKQEAgLTExNiw0ICsxMzEsNCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgVGhlIG5hbWUgb2YgdGhlIERMTCB0aGF0IGlzIGJ1aWx0IGJ5IHRoZSBDQyB2ZXJzaW9uIG9mIHRoZSBzeXN0ZW0uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGliSVhYTUw0QyI7Citjb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gImxpYnhlcmNlcy1jIjsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9TdW5LYWlEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9TdW5LYWlEZWZzLmhwcAppbmRleCAxNThkMTgxLi5lYWRhNmUyIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9Db21waWxlcnMvU3VuS2FpRGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL1N1bkthaURlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDAgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM3OjAxICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjQwICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NToyNSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTExMiw3ICsxMTUsNyBAQAogLy8gIHZlcnNpb25pbmcgc3RyaW5nLiBUaGlzIGlzIGRlZmluZWQgaW4gWE1MNENEZWZzLmhwcCB3aGljaCBpcyB3aGF0IHRoaXMKIC8vICBmaWxlIGlzIGluY2x1ZGVkIGludG8uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAiS0FJWE1MNEMiIFhNTDRDX0RMTFZlcnNpb25TdHI7Citjb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gIktBSVhFUkNFU0MiIFhNTDRDX0RMTFZlcnNpb25TdHI7CiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Db21waWxlcnMvVGFuZGVtQ0NEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9UYW5kZW1DQ0RlZnMuaHBwCmluZGV4IDlmYmYzM2UuLjJmYjE3YmIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0NvbXBpbGVycy9UYW5kZW1DQ0RlZnMuaHBwCisrKyBiL3NyYy91dGlsL0NvbXBpbGVycy9UYW5kZW1DQ0RlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDAgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM3OjAzICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjQwICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NToyNSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTExNyw0ICsxMjAsNCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgVGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdGhhdCBpcyBidWlsdCBieSB0aGUgVGFuZGVtIHZlcnNpb24gb2YgdGhlIHN5c3RlbS4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJJWFhNTDRDIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGlieGVyY2VzLWMiOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL1ZDUFBEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9WQ1BQRGVmcy5ocHAKaW5kZXggYTA0MTFjNi4uYjlkZDUwZSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL1ZDUFBEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvVkNQUERlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDEgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzEwIDIxOjI2OjE0ICBhYmFnY2hpCisgKiBDaGFuZ2VkIHRoZSBETEwgbmFtZQorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ1OjI1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTEzLDQgKzExNiw0IEBACiAvLyAgdmVyc2lvbmluZyBzdHJpbmcuIFRoaXMgaXMgZGVmaW5lZCBpbiBYTUw0Q0RlZnMuaHBwIHdoaWNoIGlzIHdoYXQgdGhpcwogLy8gIGZpbGUgaXMgaW5jbHVkZWQgaW50by4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJJWFhNTDRDIiBYTUw0Q19ETExWZXJzaW9uU3RyOworY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJ4ZXJjZXMtY18iIFhNTDRDX0RMTFZlcnNpb25TdHI7CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9NYWtlZmlsZS5pbiBiL3NyYy91dGlsL01ha2VmaWxlLmluCmluZGV4IDQyNGM2MGEuLjg5NGVkODAgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL01ha2VmaWxlLmluCisrKyBiL3NyYy91dGlsL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwyMSBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA0OjQwICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMTQgMjM6NTM6MjQgIHJhaHVsagorIyBSZW1vdmVkIHRoZSBvZmZlbmRpbmcgQ3RybC1NJ3MgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UKKyMgbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyMKKyMgUFI6CisjIE9idGFpbmVkIGZyb206CisjIFN1Ym1pdHRlZCBieToKKyMgUmV2aWV3ZWQgYnk6CisjCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMjowMDowNSAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KKyMgUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDQ6NDAgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQ1OjA5ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02NCw3ICs3Nyw4IEBACiAjCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAotQ09NUElMRVIgPSBAY29tcGlsZXJACitDQyAgPSBAY2NACitDWFggPSBAY3h4QAogQ1hYRkxBR1MgPSBAY3h4ZmxhZ3NACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKZGlmZiAtLWdpdCBhL3NyYy91dGlsL01zZ0xvYWRlcnMvSUNVL0lDVU1zZ0xvYWRlci5jcHAgYi9zcmMvdXRpbC9Nc2dMb2FkZXJzL0lDVS9JQ1VNc2dMb2FkZXIuY3BwCmluZGV4IDA2NmRmNGEuLmE1NGNhNmUgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL01zZ0xvYWRlcnMvSUNVL0lDVU1zZ0xvYWRlci5jcHAKKysrIGIvc3JjL3V0aWwvTXNnTG9hZGVycy9JQ1UvSUNVTXNnTG9hZGVyLmNwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjIzICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xOSAyMToyNDowMyAgYXJ1bmExCisgKiBpbmNvcnBvcmF0ZWQgSUNVIDEuMy4xIHJlbGF0ZWQgY2hhbmdlcyBpbnQgaGUgZmlsZQorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MjMgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQ1OjI2ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTE3LDkgKzEyMCw5IEBACiAgICAgfQogCiAgICAgLy8gT2ssIGxldHMgdHJ5IHRvIGNyZWF0ZSB0aGUgYnVuZGxlIG5vdwotICAgIFVFcnJvckNvZGUgZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKICAgICBmQnVuZGxlID0gbmV3IFJlc291cmNlQnVuZGxlKHRtcFBhdGgsIGVycik7Ci0gICAgaWYgKCFTVUNDRVNTKGVycikpCisgICAgaWYgKCFVX1NVQ0NFU1MoZXJyKSkKICAgICB7CiAgICAgICAgIC8vIDxUQkQ+IE5lZWQgdG8gcGFuaWMgYWdhaW4gaGVyZT8KICAgICB9CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Nc2dMb2FkZXJzL0lDVS9NYWtlZmlsZS5pbiBiL3NyYy91dGlsL01zZ0xvYWRlcnMvSUNVL01ha2VmaWxlLmluCmluZGV4IDQ5YTZhNzcuLjc5MzA3NTEgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL01zZ0xvYWRlcnMvSUNVL01ha2VmaWxlLmluCisrKyBiL3NyYy91dGlsL01zZ0xvYWRlcnMvSUNVL01ha2VmaWxlLmluCkBAIC01NSwxNiArNTUsMzAgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzoyNSAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4zICAxOTk5LzEyLzE0IDIzOjUzOjI3ICByYWh1bGoKKyMgUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisjIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDA6MTggIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCisjIFJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjI1ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NToyNiAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgotIzoKKyMKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9DcHBFcnJNc2dzX0VOX1VTLmhwcCBiL3NyYy91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvQ3BwRXJyTXNnc19FTl9VUy5ocHAKaW5kZXggNmM5OGQ2Ni4uOGNlNDhhOSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9DcHBFcnJNc2dzX0VOX1VTLmhwcAorKysgYi9zcmMvdXRpbC9Nc2dMb2FkZXJzL0luTWVtb3J5L0NwcEVyck1zZ3NfRU5fVVMuaHBwCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgLCB7IDB4MDA0MSwweDAwNzQsMHgwMDc0LDB4MDA3MiwweDAwNjksMHgwMDYyLDB4MDA3NSwweDAwNzQsMHgwMDY1LDB4MDAyMCwweDAwMjcsMHgwMDdCLDB4MDAzMCwweDAwN0QsMHgwMDI3LDB4MDAyMCwweDAwNzIsMHgwMDY1LDB4MDA2NiwweDAwNjUsMHgwMDcyLDB4MDA3MywweDAwMjAsMHgwMDc0LDB4MDA2RiwweDAwMjAsMHgwMDYxLDB4MDA2RSwweDAwMjAsMHgwMDc1LDB4MDA2RSwweDAwNkIsMHgwMDZFLDB4MDA2RiwweDAwNzcsMHgwMDZFLDB4MDAyMCwweDAwNkUsMHgwMDZGLDB4MDA3NCwweDAwNjEsMHgwMDc0LDB4MDA2OSwweDAwNkYsMHgwMDZFLDB4MDAyMCwweDAwMjcsMHgwMDdCLDB4MDAzMSwweDAwN0QsMHgwMDI3LDB4MDAgfQogICAsIHsgMHgwMDQ1LDB4MDA2QywweDAwNjUsMHgwMDZELDB4MDA2NSwweDAwNkUsMHgwMDc0LDB4MDAyMCwweDAwMjcsMHgwMDdCLDB4MDAzMCwweDAwN0QsMHgwMDI3LDB4MDAyMCwweDAwNzcsMHgwMDYxLDB4MDA3MywweDAwMjAsMHgwMDc1LDB4MDA3MywweDAwNjUsMHgwMDY0LDB4MDAyMCwweDAwNjksMHgwMDZFLDB4MDAyMCwweDAwNzQsMHgwMDY4LDB4MDA2NSwweDAwMjAsMHgwMDQ0LDB4MDA0RiwweDAwNDMsMHgwMDU0LDB4MDA1OSwweDAwNTAsMHgwMDQ1LDB4MDAyMCwweDAwNjIsMHgwMDc1LDB4MDA3NCwweDAwMjAsMHgwMDZFLDB4MDA2NSwweDAwNzYsMHgwMDY1LDB4MDA3MiwweDAwMjAsMHgwMDY0LDB4MDA2NSwweDAwNjMsMHgwMDZDLDB4MDA2MSwweDAwNzIsMHgwMDY1LDB4MDA2NCwweDAwIH0KICAgLCB7IDB4MDA0NSwweDAwNkQsMHgwMDcwLDB4MDA3NCwweDAwNzksMHgwMDIwLDB4MDA2MywweDAwNkYsMHgwMDZFLDB4MDA3NCwweDAwNjUsMHgwMDZFLDB4MDA3NCwweDAwMjAsMHgwMDZFLDB4MDA2RiwweDAwNzQsMHgwMDIwLDB4MDA3NiwweDAwNjEsMHgwMDZDLDB4MDA2OSwweDAwNjQsMHgwMDIwLDB4MDA2NiwweDAwNkYsMHgwMDcyLDB4MDAyMCwweDAwNjMsMHgwMDZGLDB4MDA2RSwweDAwNzQsMHgwMDY1LDB4MDA2RSwweDAwNzQsMHgwMDIwLDB4MDA2RCwweDAwNkYsMHgwMDY0LDB4MDA2NSwweDAwNkMsMHgwMDNBLDB4MDAyMCwweDAwMjcsMHgwMDdCLDB4MDAzMCwweDAwN0QsMHgwMDI3LDB4MDAgfQotICAsIHsgMHgwMDQxLDB4MDA3NCwweDAwNzQsMHgwMDcyLDB4MDA2OSwweDAwNjIsMHgwMDc1LDB4MDA3NCwweDAwNjUsMHgwMDIwLDB4MDAyNywweDAwN0IsMHgwMDdCLDB4MDAzMCwweDAwN0QsMHgwMDdELDB4MDA3QiwweDAwMzEsMHgwMDdELDB4MDAyNywweDAwMjAsMHgwMDY5LDB4MDA3MywweDAwMjAsMHgwMDZFLDB4MDA2RiwweDAwNzQsMHgwMDIwLDB4MDA2NCwweDAwNjUsMHgwMDYzLDB4MDA2QywweDAwNjEsMHgwMDcyLDB4MDA2NSwweDAwNjQsMHgwMDIwLDB4MDA2NiwweDAwNkYsMHgwMDcyLDB4MDAyMCwweDAwNjUsMHgwMDZDLDB4MDA2NSwweDAwNkQsMHgwMDY1LDB4MDA2RSwweDAwNzQsMHgwMDIwLDB4MDAyNywweDAwN0IsMHgwMDMyLDB4MDA3RCwweDAwMjcsMHgwMCB9CisgICwgeyAweDAwNDEsMHgwMDc0LDB4MDA3NCwweDAwNzIsMHgwMDY5LDB4MDA2MiwweDAwNzUsMHgwMDc0LDB4MDA2NSwweDAwMjAsMHgwMDI3LDB4MDA3QiwweDAwMzAsMHgwMDdELDB4MDAyNywweDAwMjAsMHgwMDY5LDB4MDA3MywweDAwMjAsMHgwMDZFLDB4MDA2RiwweDAwNzQsMHgwMDIwLDB4MDA2NCwweDAwNjUsMHgwMDYzLDB4MDA2QywweDAwNjEsMHgwMDcyLDB4MDA2NSwweDAwNjQsMHgwMDIwLDB4MDA2NiwweDAwNkYsMHgwMDcyLDB4MDAyMCwweDAwNjUsMHgwMDZDLDB4MDA2NSwweDAwNkQsMHgwMDY1LDB4MDA2RSwweDAwNzQsMHgwMDIwLDB4MDAyNywweDAwN0IsMHgwMDMxLDB4MDA3RCwweDAwMjcsMHgwMCB9CiAgICwgeyAweDAwNDEsMHgwMDc0LDB4MDA3NCwweDAwNzIsMHgwMDY5LDB4MDA2MiwweDAwNzUsMHgwMDc0LDB4MDA2NSwweDAwNzMsMHgwMDIwLDB4MDA2RiwweDAwNjYsMHgwMDIwLDB4MDA3NCwweDAwNzksMHgwMDcwLDB4MDA2NSwweDAwMjAsMHgwMDQ1LDB4MDA0RSwweDAwNTQsMHgwMDQ5LDB4MDA1NCwweDAwNTksMHgwMDJGLDB4MDA0NSwweDAwNEUsMHgwMDU0LDB4MDA0OSwweDAwNTQsMHgwMDQ5LDB4MDA0NSwweDAwNTMsMHgwMDIwLDB4MDA2RCwweDAwNzUsMHgwMDczLDB4MDA3NCwweDAwMjAsMHgwMDcyLDB4MDA2NSwweDAwNjYsMHgwMDY1LDB4MDA3MiwweDAwMjAsMHgwMDc0LDB4MDA2RiwweDAwMjAsMHgwMDYxLDB4MDA2RSwweDAwMjAsMHgwMDY1LDB4MDA3OCwweDAwNzQsMHgwMDY1LDB4MDA3MiwweDAwNkUsMHgwMDYxLDB4MDA2QywweDAwMkMsMHgwMDIwLDB4MDA3NSwweDAwNkUsMHgwMDcwLDB4MDA2MSwweDAwNzIsMHgwMDczLDB4MDA2NSwweDAwNjQsMHgwMDIwLDB4MDA2NSwweDAwNkUsMHgwMDc0LDB4MDA2OSwweDAwNzQsMHgwMDc5LDB4MDAgfQogICAsIHsgMHgwMDQxLDB4MDA3NCwweDAwNzQsMHgwMDcyLDB4MDA2OSwweDAwNjIsMHgwMDc1LDB4MDA3NCwweDAwNjUsMHgwMDIwLDB4MDAyNywweDAwN0IsMHgwMDMwLDB4MDA3RCwweDAwMjcsMHgwMDIwLDB4MDA3MiwweDAwNjUsMHgwMDY2LDB4MDA2NSwweDAwNzIsMHgwMDczLDB4MDAyMCwweDAwNzQsMHgwMDZGLDB4MDAyMCwweDAwNjEsMHgwMDZFLDB4MDAyMCwweDAwNzUsMHgwMDZFLDB4MDA2QiwweDAwNkUsMHgwMDZGLDB4MDA3NywweDAwNkUsMHgwMDIwLDB4MDA2NSwweDAwNkUsMHgwMDc0LDB4MDA2OSwweDAwNzQsMHgwMDc5LDB4MDAyMCwweDAwMjcsMHgwMDdCLDB4MDAzMSwweDAwN0QsMHgwMDI3LDB4MDAgfQogICAsIHsgMHgwMDRFLDB4MDA2RiwweDAwNzQsMHgwMDIwLDB4MDA2NSwweDAwNkUsMHgwMDZGLDB4MDA3NSwweDAwNjcsMHgwMDY4LDB4MDAyMCwweDAwNjUsMHgwMDZDLDB4MDA2NSwweDAwNkQsMHgwMDY1LDB4MDA2RSwweDAwNzQsMHgwMDczLDB4MDAyMCwweDAwNzQsMHgwMDZGLDB4MDAyMCwweDAwNkQsMHgwMDYxLDB4MDA3NCwweDAwNjMsMHgwMDY4LDB4MDAyMCwweDAwNjMsMHgwMDZGLDB4MDA2RSwweDAwNzQsMHgwMDY1LDB4MDA2RSwweDAwNzQsMHgwMDIwLDB4MDA2RCwweDAwNkYsMHgwMDY0LDB4MDA2NSwweDAwNkMsMHgwMDIwLDB4MDAzQSwweDAwMjAsMHgwMDI3LDB4MDA3QiwweDAwMzAsMHgwMDdELDB4MDAyNywweDAwIH0KZGlmZiAtLWdpdCBhL3NyYy91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvSW5NZW1Nc2dMb2FkZXIuY3BwIGIvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9Jbk1lbU1zZ0xvYWRlci5jcHAKaW5kZXggNGVhOGU3Yi4uNzdjZDkwYiAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9Jbk1lbU1zZ0xvYWRlci5jcHAKKysrIGIvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9Jbk1lbU1zZ0xvYWRlci5jcHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzoxOSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6NDg6NDcgIHJhaHVsagorICogUmVtb3ZlZCBieXRlc3dhcHBpbmcgbG9naWMgYXMgaXRzIG5vdCBuZWVkZWQgZm9yIEluTWVtb3J5IG1lc3NhZ2UgbG9hZGluZy4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjE5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8wOCAyMDo0NToyNiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEyMywxMSArMTI2LDcgQEAKICAgICAgICAgY29uc3QgWE1MQ2gqIHNyY1B0ciA9IGdYTUxFcnJBcnJheVttc2dUb0xvYWQgLSAxXTsKICAgICAgICAgd2hpbGUgKCpzcmNQdHIgJiYgKG91dFB0ciA8IGVuZFB0cikpCiAgICAgICAgIHsKLSAgICAgICAgICAgICNpZiBkZWZpbmVkKEVORElBTk1PREVfTElUVExFKQogICAgICAgICAgICAgKm91dFB0cisrID0gKnNyY1B0cisrOwotICAgICAgICAgICAgI2Vsc2UKLSAgICAgICAgICAgICpvdXRQdHIrKyA9IEJpdE9wczo6c3dhcEJ5dGVzKCpzcmNQdHIrKyk7Ci0gICAgICAgICAgICAjZW5kaWYKICAgICAgICAgfQogICAgICAgICAqb3V0UHRyID0gMDsKICAgICB9CkBAIC0xMzYsMTEgKzEzNSw3IEBACiAgICAgICAgIGNvbnN0IFhNTENoKiBzcmNQdHIgPSBnWE1MRXhjZXB0QXJyYXlbbXNnVG9Mb2FkIC0gMV07CiAgICAgICAgIHdoaWxlICgqc3JjUHRyICYmIChvdXRQdHIgPCBlbmRQdHIpKQogICAgICAgICB7Ci0gICAgICAgICAgICAjaWYgZGVmaW5lZChFTkRJQU5NT0RFX0xJVFRMRSkKICAgICAgICAgICAgICpvdXRQdHIrKyA9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICAqb3V0UHRyKysgPSBCaXRPcHM6OnN3YXBCeXRlcygqc3JjUHRyKyspOwotICAgICAgICAgICAgI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgKm91dFB0ciA9IDA7CiAgICAgfQpAQCAtMTQ5LDExICsxNDQsNyBAQAogICAgICAgICBjb25zdCBYTUxDaCogc3JjUHRyID0gZ1hNTFZhbGlkaXR5QXJyYXlbbXNnVG9Mb2FkIC0gMV07CiAgICAgICAgIHdoaWxlICgqc3JjUHRyICYmIChvdXRQdHIgPCBlbmRQdHIpKQogICAgICAgICB7Ci0gICAgICAgICAgICAjaWYgZGVmaW5lZChFTkRJQU5NT0RFX0xJVFRMRSkKICAgICAgICAgICAgICpvdXRQdHIrKyA9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICAqb3V0UHRyKysgPSBCaXRPcHM6OnN3YXBCeXRlcygqc3JjUHRyKyspOwotICAgICAgICAgICAgI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgKm91dFB0ciA9IDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9NYWtlZmlsZS5pbiBiL3NyYy91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvTWFrZWZpbGUuaW4KaW5kZXggZTc0ZjA5OS4uNGU1YmQ5YSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9NYWtlZmlsZS5pbgorKysgYi9zcmMvdXRpbC9Nc2dMb2FkZXJzL0luTWVtb3J5L01ha2VmaWxlLmluCkBAIC01NSwxNiArNTUsMzAgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzoyMCAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4zICAxOTk5LzEyLzE0IDIzOjUzOjI4ICByYWh1bGoKKyMgUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisjIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDA6MjIgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCisjIFJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjIwICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NToyNyAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgotIzoKKyMKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvTXNnTG9hZGVycy9Nc2dDYXRhbG9nL01ha2VmaWxlLmluIGIvc3JjL3V0aWwvTXNnTG9hZGVycy9Nc2dDYXRhbG9nL01ha2VmaWxlLmluCmluZGV4IDc0YWFiYmUuLjg0ZmZmN2YgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy9NYWtlZmlsZS5pbgorKysgYi9zcmMvdXRpbC9Nc2dMb2FkZXJzL01zZ0NhdGFsb2cvTWFrZWZpbGUuaW4KQEAgLTU1LDE2ICs1NSwzMCBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjE2ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMTQgMjM6NTM6MjkgIHJhaHVsagorIyBSZW1vdmVkIHRoZSBvZmZlbmRpbmcgQ3RybC1NJ3MgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UKKyMgbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyMKKyMgUFI6CisjIE9idGFpbmVkIGZyb206CisjIFN1Ym1pdHRlZCBieToKKyMgUmV2aWV3ZWQgYnk6CisjCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMjowMDoyNSAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KKyMgUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MTYgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ1OjI3ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCi0jOgorIwogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Nc2dMb2FkZXJzL01zZ0NhdGFsb2cvWE1MTXNnQ2F0X0VOX1VTLk1zZyBiL3NyYy91dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy9YTUxNc2dDYXRfRU5fVVMuTXNnCmluZGV4IGRiMDY4OWEuLjc4MzY5MzYgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy9YTUxNc2dDYXRfRU5fVVMuTXNnCisrKyBiL3NyYy91dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy9YTUxNc2dDYXRfRU5fVVMuTXNnCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAxNCAgQXR0cmlidXRlICd7MH0nIHJlZmVycyB0byBhbiB1bmtub3duIG5vdGF0aW9uICd7MX0nCiAgMTUgIEVsZW1lbnQgJ3swfScgd2FzIHVzZWQgaW4gdGhlIERPQ1RZUEUgYnV0IG5ldmVyIGRlY2xhcmVkCiAgMTYgIEVtcHR5IGNvbnRlbnQgbm90IHZhbGlkIGZvciBjb250ZW50IG1vZGVsOiAnezB9JwotIDE3ICBBdHRyaWJ1dGUgJ3t7MH19ezF9JyBpcyBub3QgZGVjbGFyZWQgZm9yIGVsZW1lbnQgJ3syfScKKyAxNyAgQXR0cmlidXRlICd7MH0nIGlzIG5vdCBkZWNsYXJlZCBmb3IgZWxlbWVudCAnezF9JwogIDE4ICBBdHRyaWJ1dGVzIG9mIHR5cGUgRU5USVRZL0VOVElUSUVTIG11c3QgcmVmZXIgdG8gYW4gZXh0ZXJuYWwsIHVucGFyc2VkIGVudGl0eQogIDE5ICBBdHRyaWJ1dGUgJ3swfScgcmVmZXJzIHRvIGFuIHVua25vd24gZW50aXR5ICd7MX0nCiAgMjAgIE5vdCBlbm91Z2ggZWxlbWVudHMgdG8gbWF0Y2ggY29udGVudCBtb2RlbCA6ICd7MH0nCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9NdXRleGVzLmNwcCBiL3NyYy91dGlsL011dGV4ZXMuY3BwCmluZGV4IDU1ZDk3MzIuLjQxNDJkZTcgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL011dGV4ZXMuY3BwCisrKyBiL3NyYy91dGlsL011dGV4ZXMuY3BwCkBAIC01Niw4ICs1NiwxMiBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDQ6NDUgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAyIDE5OjQyOjM1ICByb2RkZXkKKyAqIEdvdCByaWQgb2YgYXR0ZW1wdHMgdG8gZmFuY3kvc2NobWFuenkgbGF6eSBldmFsIG11dGV4IGltcGxlbWVudGF0aW9uIGFuZCBqdXN0CisgKiBmb3JjZSBhbnlvbmUgd2hvIG5lZWRzIGEgZ2xvYmFsL3N0YXRpYyBtdXRleCB0byBsYXp5IGV2YWwgdGhhdCB0aGVtc2VsdmVzLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDQ6NDUgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjA5ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODIsNiArODYsOCBAQAogCiAgICAgZkhhbmRsZSgwKQogeworICAgIC8vIEFzayB0aGUgcGVyLXBsYXRmb3JtIGRyaXZlciB0byBtYWtlIHVzIGEgbXV0ZXgKKyAgICBmSGFuZGxlID0gWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCk7CiB9CiAKIApAQCAtMTAwLDEyICsxMDYsNiBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB2b2lkIFhNTE11dGV4Ojpsb2NrKCkKIHsKLSAgICBpZiAoIWZIYW5kbGUpCi0gICAgewotICAgICAgICB2b2lkKiB0bXBIYW5kbGUgPSBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKTsKLSAgICAgICAgaWYgKFhNTFBsYXRmb3JtVXRpbHM6OmNvbXBhcmVBbmRTd2FwKCZmSGFuZGxlLCB0bXBIYW5kbGUsIDApICE9IDApCi0gICAgICAgICAgICBYTUxQbGF0Zm9ybVV0aWxzOjpjbG9zZU11dGV4KHRtcEhhbmRsZSk7Ci0gICAgfQogICAgIFhNTFBsYXRmb3JtVXRpbHM6OmxvY2tNdXRleChmSGFuZGxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvUGxhdGZvcm1zL0FJWC9BSVhQbGF0Zm9ybVV0aWxzLmNwcCBiL3NyYy91dGlsL1BsYXRmb3Jtcy9BSVgvQUlYUGxhdGZvcm1VdGlscy5jcHAKaW5kZXggOGY0MDhhYi4uZTBiN2Q2MSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvUGxhdGZvcm1zL0FJWC9BSVhQbGF0Zm9ybVV0aWxzLmNwcAorKysgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvQUlYL0FJWFBsYXRmb3JtVXRpbHMuY3BwCkBAIC01Niw4ICs1NiwxNyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MTEgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS40ICAxOTk5LzEyLzAzIDAyOjM1OjIyICBhcnVuYTEKKyAqIG11dGV4IHJlY3Vyc2l2ZSBhdHRyaWJ1dGUgaW50cm9kdWNlZCBpbiBtYWtlTXV0ZXgKKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMDEgMDI6NTU6NDIgIGFydW5hMQorICogQWRkZWQgcGFuaWMgY2FsbHMgYW5kIG1vZGlmaWVkIG1ha2VUcmFuc1NlcnZpY2UgZm9yICBBSVgKKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDA6MzQgIHJhaHVsagorICogQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLlJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MTEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS42ICAxOTk5LzExLzA4IDIwOjQ1OjI5ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzMsMTAgKzgyLDYgQEAKICNpbmNsdWRlICAgIDxzeXMvYXRvbWljX29wLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgICAgPHV0aWwvUGxhdGZvcm1VdGlscy5ocHA+Ci0jaW5jbHVkZSAgICA8dXRpbC9SdW50aW1lRXhjZXB0aW9uLmhwcD4KLSNpbmNsdWRlICAgIDx1dGlsL0phbml0b3IuaHBwPgotI2luY2x1ZGUgICAgPHV0aWwvWE1MU3RyaW5nLmhwcD4KICNpbmNsdWRlICAgIDxzdGRpby5oPgogI2luY2x1ZGUgICAgPHN0ZGxpYi5oPgogI2luY2x1ZGUgICAgPGVycm5vLmg+CkBAIC04Niw2ICs5MSwxMSBAQAogI2luY2x1ZGUgICAgPHVuaXN0ZC5oPgogI2luY2x1ZGUgCTxzeXMvbGRyLmg+CiAKKyNpbmNsdWRlICAgIDx1dGlsL1BsYXRmb3JtVXRpbHMuaHBwPgorI2luY2x1ZGUgICAgPHV0aWwvUnVudGltZUV4Y2VwdGlvbi5ocHA+CisjaW5jbHVkZSAgICA8dXRpbC9KYW5pdG9yLmhwcD4KKyNpbmNsdWRlICAgIDx1dGlsL1hNTFN0cmluZy5ocHA+CisKICNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9UUkFOU0NPREVSKQogICAgICNpbmNsdWRlIDx1dGlsL1RyYW5zY29kZXJzL0lDVS9JQ1VUcmFuc1NlcnZpY2UuaHBwPgogI2Vsc2UgICAvLyB1c2UgbmF0aXZlIHRyYW5zY29kZXIKQEAgLTE0NSw3ICsxNTUsNyBAQAogICAgIC8vIEhlcmUgeW91IHdvdWxkIGFsc28gc2V0IHRoZSBmZ0xpYkxvY2F0aW9uIGdsb2JhbCB2YXJpYWJsZQogICAgIC8vIFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24gaXMgdGhlIHZhcmlhYmxlIHRvIGJlIHNldAogCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKiBsaWJyYXJ5UGF0aCA9IDA7CisgICAgY2hhciAqIGxpYnJhcnlQYXRoID0gMDsKIAogICAgIGNoYXIgbGliTmFtZVsyNTZdOwogICAgIHN0cmNweShsaWJOYW1lLCBYTUw0Q19ETExOYW1lKTsKQEAgLTE1NiwxNiArMTY2LDEyIEBACiAgICAgY2hhciBidWZbYnVmTGVuXTsJCSAgIC8vIGl0J3MgaW4gdGhlIHN0YWNrIGFueXdheQogCiAgICAgaWYgKGxvYWQobGliTmFtZSwgTF9MSUJQQVRIX0VYRUMsICIuIikgPT0gTlVMTCkgewotCQljaGFyIGVycm9yQnVmZmVyWzEwMjRdOwotICAgICAgICBzcHJpbnRmKGVycm9yQnVmZmVyLCAiQ291bGQgbm90IGxvYWQgbGlicmFyeSAnJXMnIiwgbGliTmFtZSk7Ci0JCXBlcnJvciAoZXJyb3JCdWZmZXIpOwotICAgICAgICBleGl0KC0xKTsKKwkJcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRGaW5kTGliICk7CiAgICAgfQogCiAgICAgaW50IHJldHZhbCA9IGxvYWRxdWVyeShMX0dFVElORk8sIGJ1ZiwgYnVmTGVuKTsKICAgICBpZiAocmV0dmFsID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvYWQgbGlicmFyeSAnJXMnLlxuIiwgbGliTmFtZSk7Ci0gICAgICAgIGV4aXQoLTEpOworCQlwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudEZpbmRMaWIgKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgbGRfaW5mbyogb25lQnVmUHRyID0gKHN0cnVjdCBsZF9pbmZvKilidWY7CkBAIC0xOTgsNyArMjA0LDcgQEAKIAogICAgIGlmIChYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uID09IE5VTEwpCiAgICAgewotICAgICAgICBwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UgKTsKKyAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRGaW5kTGliICk7CiAgICAgfQogfQogCkBAIC0yMTcsOSArMjIzLDggQEAKICAgICAvLyAgaW4gdGhlIC5cSW50bCBzdWJkaXJlY3RvcnkgdW5kZXIgdGhpcyBETEwuCiAgICAgLy8KIAotICAgIHN0YXRpYyBjb25zdCBjaGFyICogeG1sNGNJbnRsRGlyRW52VmFyID0gIklDVV9EQVRBIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqIHNoYXJlZExpYkVudlZhciAgICA9ICJMSUJQQVRIIjsKLSAgICBzdGF0aWMgY2hhciAqIGludGxQYXRoID0gMDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIHhtbDRjSW50bERpckVudlZhcgk9ICJJQ1VfREFUQSI7CisgICAgY2hhciAqIAkJCQlpbnRsUGF0aCAJCQk9IDA7CiAKICAgICBjaGFyKiBlbnZWYWwgPSBnZXRlbnYoeG1sNGNJbnRsRGlyRW52VmFyKTsKICAgICAvL2NoZWNrIGlmIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldApAQCAtMjM1LDg4ICsyNDAsMjcgQEAKICAgICAgICAgICAgIHN0cmNhdCgoY2hhciAqKSBpbnRsUGF0aCwgIi8iKTsKICAgICAgICAgfQogCQlJQ1VUcmFuc1NlcnZpY2U6OnNldElDVVBhdGgoaW50bFBhdGgpOwotICAgICAgICBpZiAoaW50bFBhdGggIT0gTlVMTCkgZGVsZXRlIGludGxQYXRoOworICAgICAgICBkZWxldGUgaW50bFBhdGg7CiAKICAgICAgICAgcmV0dXJuIG5ldyBJQ1VUcmFuc1NlcnZpY2U7CiAgICAgfQogCi0gICAgLy8KLSAgICAvLyAgSWYgd2UgZGlkIG5vdCBmaW5kIHRoZSBlbnZpcm9ubWVudCB2YXIsIHNvIGxldHMgdHJ5IHRvIGdvIHRoZSBhdXRvCi0gICAgLy8gIHNlYXJjaCByb3V0ZS4KKyAJLy8KKyAgICAvLyAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIElDVV9EQVRBIGlzIG5vdCBzZXQsIGFzc3VtZSB0aGF0IHRoZQorICAgIC8vICBjb252ZXJ0ZXIgZmlsZXMgYXJlIHN0b3JlZCByZWxhdGl2ZSB0byB0aGUgWGVyY2VzLUMgbGlicmFyeS4KICAgICAvLwogCi0gICAgY2hhciBsaWJOYW1lWzI1Nl07Ci0gICAgc3RyY3B5KGxpYk5hbWUsIFhNTDRDX0RMTE5hbWUpOwotICAgIHN0cmNhdChsaWJOYW1lLCBnWE1MNENWZXJzaW9uU3RyKTsKLSAgICBzdHJjYXQobGliTmFtZSwgIi5hIik7CisgICAgdW5zaWduZWQgaW50ICBsZW50ID0gc3RybGVuKFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIi9pY3UvZGF0YS8iKSArIDE7CisgICAgaW50bFBhdGggPSBuZXcgY2hhcltsZW50XTsKKyAgICBzdHJjcHkoaW50bFBhdGgsIFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24pOworICAgIHN0cmNhdChpbnRsUGF0aCwgIi9pY3UvZGF0YS8iKTsKIAotICAgIGNoYXIqIGxpYkVudlZhciA9IGdldGVudihzaGFyZWRMaWJFbnZWYXIpOwotICAgIGNoYXIqIGxpYlBhdGggPSBOVUxMOwotCi0gICAgaWYgKGxpYkVudlZhciA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIkVycm9yOiBDb3VsZCBub3QgbG9jYXRlIGkxOG4gY29udmVydGVyIGZpbGVzLlxuIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICJFbnZpcm9ubWVudCB2YXJpYWJsZSAnJXMnIGlzIG5vdCBkZWZpbmVkLlxuIiwgc2hhcmVkTGliRW52VmFyKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIkVudmlyb25tZW50IHZhcmlhYmxlICdJQ1VfREFUQScgaXMgYWxzbyBub3QgZGVmaW5lZC5cbiIpOwotICAgICAgICBleGl0KC0xKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEl0cyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgY29weSBiZWNhdXNlIHN0cnRvaygpIG1vZGlmaWVzIHRoZQotICAgIC8vIHN0cmluZyBhcyBpdCByZXR1cm5zIHRva2Vucy4gV2UgZG9uJ3Qgd2FudCB0byBtb2RpZnkgdGhlIHN0cmluZwotICAgIC8vIHJldHVybmVkIHRvIGJ5IGdldGVudigpLgotICAgIC8vCi0KLSAgICBsaWJQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYkVudlZhcikgKyAxXTsKLSAgICBzdHJjcHkobGliUGF0aCwgbGliRW52VmFyKTsKLQotICAgIC8vRmlyc3QgZG8gdGhlIHNlYXJjaGluZyBwcm9jZXNzIGZvciB0aGUgZmlyc3QgZGlyZWN0b3J5IGxpc3RpbmcKLSAgICAvLwotICAgIGNoYXIqICBhbGxQYXRocyA9IGxpYlBhdGg7Ci0gICAgY2hhciogIGxpYlBhdGhOYW1lOwotCi0gICAgd2hpbGUgKChsaWJQYXRoTmFtZSA9IHN0cnRvayhhbGxQYXRocywgIjoiKSkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEZJTEUqICBkdW1teUZwdHIgPSAwOwotICAgICAgICBhbGxQYXRocyA9IDA7Ci0KLSAgICAgICAgY2hhciogbGliZmlsZSA9IG5ldyBjaGFyW3N0cmxlbihsaWJQYXRoTmFtZSkgKyBzdHJsZW4obGliTmFtZSkgKyAyXTsKLSAgICAgICAgc3RyY3B5KGxpYmZpbGUsIGxpYlBhdGhOYW1lKTsKLSAgICAgICAgc3RyY2F0KGxpYmZpbGUsICIvIik7Ci0gICAgICAgIHN0cmNhdChsaWJmaWxlLCBsaWJOYW1lKTsKLQotICAgICAgICBkdW1teUZwdHIgPSAoRklMRSAqKSBmb3BlbihsaWJmaWxlLCAicmIiKTsKLSAgICAgICAgZGVsZXRlIFtdIGxpYmZpbGU7Ci0gICAgICAgIGlmIChkdW1teUZwdHIgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgZmNsb3NlKGR1bW15RnB0cik7Ci0gICAgICAgICAgICBpbnRsUGF0aCA9Ci0gICAgICAgICAgICAgIG5ldyBjaGFyW3N0cmxlbihsaWJQYXRoTmFtZSkrIHN0cmxlbigiL2ljdS9kYXRhLyIpKzFdOwotICAgICAgICAgICAgc3RyY3B5KChjaGFyICopIGludGxQYXRoLCBsaWJQYXRoTmFtZSk7Ci0gICAgICAgICAgICBzdHJjYXQoKGNoYXIgKikgaW50bFBhdGgsICIvaWN1L2RhdGEvIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgfSAvLyB3aGlsZQotCi0gICAgZGVsZXRlIGxpYlBhdGg7CiAJSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKLQotICAgIGlmIChpbnRsUGF0aCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlICk7Ci0gICAgfQotICAgIGlmIChpbnRsUGF0aCAhPSBOVUxMKSBkZWxldGUgaW50bFBhdGg7CisgICAgZGVsZXRlIGludGxQYXRoOwogCiAgICAgcmV0dXJuIG5ldyBJQ1VUcmFuc1NlcnZpY2U7CiB9Ci0jZWxpZiBkZWZpbmVkIChYTUxfVVNFX0lDT05WX1RSQU5TQ09ERVIpCi17Ci0gICAgcmV0dXJuIG5ldyBJY29udlRyYW5zU2VydmljZTsKLX0KICNlbHNlCiB7CiAgICAgcmV0dXJuIG5ldyBJY29udlRyYW5zU2VydmljZTsKQEAgLTM0NCw3ICsyODgsNyBAQAogCiAgICAgY2F0Y2goLi4uKQogICAgIHsKLSAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vRGVmVHJhbnNjb2RlciApOworCQkgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudExvYWRNc2dEb21haW4pOwogICAgIH0KICAgICByZXR1cm4gcmV0VmFsOwogfQpAQCAtMzU0LDE3ICsyOTgsMjYgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpwYW5pYyhjb25zdCBQYW5pY1JlYXNvbnMgcmVhc29uKQogewotICAgIC8vCisvLwogICAgIC8vICBXZSBqdXN0IHByaW50IGEgbWVzc2FnZSBhbmQgZXhpdAogICAgIC8vCi0gICAgcHJpbnRmKCJUaGUgWE1MNEMgc3lzdGVtIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC5cbiIpOwotICAgIHByaW50ZigiVGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBmb3IgdGhpcyBmYWlsdXJlIGlzIHRoZSBpbmFiaWxpdHkgdG8gZmluZFxuIik7Ci0gICAgcHJpbnRmKCJ0aGUgaW50ZXJuYXRpb25hbCBlbmNvZGluZyBmaWxlcy4gQnkgZGVmYXVsdCwgdGhlIGVuY29kaW5nIGZpbGVzXG4iKTsKLSAgICBwcmludGYoImhhdmUgdGhlIGV4dGVuc2lvbiAuY252IGFuZCBleGlzdCBpbiBhIGRpcmVjdG9yeSBpY3UvZGF0YSByZWxhdGl2ZVxuIik7Ci0gICAgcHJpbnRmKCJ0byB0aGUgWE1MNEMgc2hhcmVkIGxpYnJhcnkuIElmIHlvdSBoYXZlIGtlcHQgdGhlIGNvbnZlcnRlciBmaWxlc1xuIik7Ci0gICAgcHJpbnRmKCJpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiwgeW91IG5lZWQgdG8gc2V0IHVwIGFuIGVudmlyb25tZW50IHZhcmlhYmxlXG4iKTsKLSAgICBwcmludGYoImNhbGxlZCBJQ1VfREFUQSB3aGljaCBkaXJlY3RseSBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGVcbiIpOwotICAgIHByaW50ZigiZW5jb2RpbmcgZmlsZXMgYXJlIGtlcHQuXG4iKTsKKworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiVGhlIFhlcmNlcy1DIHN5c3RlbSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgIklmIHlvdSBhcmUgdXNpbmcgSUNVLCB0aGVuIHRoZSBtb3N0IGxpa2VseSByZWFzb24gZm9yIHRoaXMgZmFpbHVyZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJpcyB0aGUgaW5hYmlsaXR5IHRvIGZpbmQgdGhlIElDVSBjb3ZlcnRlciBmaWxlcy4gVGhlIGNvbnZlcnRlciBmaWxlc1xuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJoYXZlIHRoZSBleHRlbnNpb24gLmNudiBhbmQgZXhpc3QgaW4gYSBkaXJlY3RvcnkgJ2ljdS9kYXRhJyByZWxhdGl2ZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJ0byB0aGUgWGVyY2VzLUMgc2hhcmVkIGxpYnJhcnkuIElmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgY29udmVydGVyIGZpbGVzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImluIGEgZGlmZmVyZW50IGxvY2F0aW9uLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgIidJQ1VfREFUQScgdG8gcG9pbnQgZGlyZWN0bHkgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJjb252ZXJ0ZXIgZmlsZXMuXG4iKTsKIAogICAgIGV4aXQoLTEpOwogfQpAQCAtNTU2LDE2ICs1MDksMjEgQEAKIHZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpCiB7CiAgICAgcHRocmVhZF9tdXRleF90KiBtdXRleCA9IG5ldyBwdGhyZWFkX211dGV4X3Q7Ci0gICAgaWYgKG11dGV4ID09IE5VTEwpCisgICAgaWYgKG11dGV4ID09ICBOVUxMKQogICAgIHsKLQkJVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdENyZWF0ZSk7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RDcmVhdGUpOwogICAgIH0KLQotICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQobXV0ZXgsIE5VTEwpKQorICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QqICBhdHRyID0gbmV3IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CisgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdChhdHRyKTsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wKGF0dHIsIE1VVEVYX1JFQ1VSU0lWRV9OUCk7CisgICAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdChtdXRleCwgYXR0cikpCiAgICAgewotCQlUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90Q3JlYXRlKTsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdENyZWF0ZSk7CiAgICAgfQotCisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveShhdHRyKTsKKyAgICBkZWxldGUgYXR0cjsKICAgICByZXR1cm4gKHZvaWQqKShtdXRleCk7CiB9CiB2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnVubG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1BsYXRmb3Jtcy9IUFVYL0hQUGxhdGZvcm1VdGlscy5jcHAgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvSFBVWC9IUFBsYXRmb3JtVXRpbHMuY3BwCmluZGV4IDgyMzZkOWEuLmM2NjRjMDIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1BsYXRmb3Jtcy9IUFVYL0hQUGxhdGZvcm1VdGlscy5jcHAKKysrIGIvc3JjL3V0aWwvUGxhdGZvcm1zL0hQVVgvSFBQbGF0Zm9ybVV0aWxzLmNwcApAQCAtNTYsOCArNTYsMjEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjA1ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8xNCAyMzo1MzozMSAgcmFodWxqCisgKiBSZW1vdmVkIHRoZSBvZmZlbmRpbmcgQ3RybC1NJ3MgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UKKyAqIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisgKgorICogUFI6CisgKiBPYnRhaW5lZCBmcm9tOgorICogU3VibWl0dGVkIGJ5OgorICogUmV2aWV3ZWQgYnk6CisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAyOjAwOjQ0ICByYWh1bGoKKyAqIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KKyAqIFJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MDUgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ1OjI5ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODQsMjUgKzk3LDI4IEBACiAjaW5jbHVkZSAgICA8bGliZ2VuLmg+CiAjaW5jbHVkZSAgICA8c3RyaW5nLmg+CiAjaW5jbHVkZSAgICA8dW5pc3RkLmg+Ci0KICNpbmNsdWRlICAgIDx1dGlsL1hNTFN0cmluZy5ocHA+CiAjaW5jbHVkZSAgICA8dXRpbC9YTUxVbmkuaHBwPgogCi0jaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKKworI2lmIGRlZmluZWQoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKICAgICAjaW5jbHVkZSA8dXRpbC9UcmFuc2NvZGVycy9JQ1UvSUNVVHJhbnNTZXJ2aWNlLmhwcD4KLSNlbHNlICAgLy8gdXNlIG5hdGl2ZSB0cmFuc2NvZGVyCisjZWxzZQorICAgIC8vIFVzZSBuYXRpdmUgdHJhbnNjb2Rlci4gU2FtZSBhcyAtRFhNTF9VU0VfTkFUSVZFX1RSQU5TQ09ERVIKICAgICAjaW5jbHVkZSA8dXRpbC9UcmFuc2NvZGVycy9JY29udi9JY29udlRyYW5zU2VydmljZS5ocHA+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQgKFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIpCisKKyNpZiBkZWZpbmVkKFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIpCiAgICAgI2luY2x1ZGUgPHV0aWwvTXNnTG9hZGVycy9JQ1UvSUNVTXNnTG9hZGVyLmhwcD4KLSNlbGlmIGRlZmluZWQgKFhNTF9VU0VfSUNPTlZfTUVTU0FHRUxPQURFUikKLSAgICAjaW5jbHVkZSA8dXRpbC9Nc2dMb2FkZXJzL01zZ0NhdGFsb2cvTXNnQ2F0YWxvZ0xvYWRlci5ocHA+Ci0jZWxzZSAgIC8vIHVzZSBJbi1tZW1vcnkgbWVzc2FnZSBsb2FkZXIKKworI2Vsc2UKKyAgICAvLyBTYW1lIGFzIC1EWE1MX1VTRV9JTk1FTV9NRVNTQUdFTE9BREVSCiAgICAgI2luY2x1ZGUgPHV0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9Jbk1lbU1zZ0xvYWRlci5ocHA+CiAjZW5kaWYKIAogCisKICNpZiAhZGVmaW5lZChYTUxfSFBVWF9LQUlDQykKICNpbmNsdWRlICAgIDxzeXMvdGltZWIuaD4gICAgICAgICAgICAgLy8gZG9lcyBub3Qgd29yayB3aXRoIEtBSSBjb21waWxlcgogI2VuZGlmCkBAIC0xOTEsNiArMjA3LDQ0IEBACiAgICAgLy8gY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIGNvbXBhcmVBbmRFeGNoYW5nZSgpIGFuZAogICAgIC8vIG11dGV4IGNyZWF0aW9uIHRoYXQgbXVzdCBiZSBicm9rZW4uCiAgICAgYXRvbWljT3BzTXV0ZXguZkhhbmRsZSA9IFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpOworCisKKyAgICAvLyBIZXJlIHlvdSB3b3VsZCBhbHNvIHNldCB0aGUgZmdMaWJMb2NhdGlvbiBnbG9iYWwgdmFyaWFibGUKKyAgICAvLyBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uIGlzIHRoZSB2YXJpYWJsZSB0byBiZSBzZXQKKworICAgIGNoYXIqICAgICAgICAgICBsaWJyYXJ5UGF0aCA9IDA7CisgICAgY2hhciAgICAgICAgICAgIGxpYk5hbWVbMjU2XTsKKyAgICBzaGxfZGVzY3JpcHRvciogZGVzYyA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIHJldCA9IDA7CisgICAgaW50ICAgICAgICAgICAgIGluZGV4ID0gMTsKKworICAgIHN0cmNweShsaWJOYW1lLCBYTUw0Q19ETExOYW1lKTsKKyAgICBzdHJjYXQobGliTmFtZSwgZ1hNTDRDVmVyc2lvblN0cik7CisgICAgc3RyY2F0KGxpYk5hbWUsICIuc2wiKTsKKworICAgIHJldCA9IHNobF9nZXQoaW5kZXgsICZkZXNjKTsKKyAgICB3aGlsZSAocmV0ICE9IC0xKQorICAgIHsKKyAgICAgICBjaGFyKiBmaWxlTmFtZSA9IGRlc2MtPmZpbGVuYW1lOworICAgICAgIGlmIChzdHJzdHIoZmlsZU5hbWUsIGxpYk5hbWUpICE9IE5VTEwpCisgICAgICAgeworICAgICAgICAgICBjaGFyKiBsYXN0U2xhc2ggPSBzdHJyY2hyKGZpbGVOYW1lLCAnLycpOworICAgICAgICAgICBzaXplX3QgY2hhcnNfdG9fZXh0cmFjdCA9IGxhc3RTbGFzaCAtIGZpbGVOYW1lOworICAgICAgICAgICBsaWJyYXJ5UGF0aCA9IG5ldyBjaGFyW2NoYXJzX3RvX2V4dHJhY3QgKyAxXTsKKyAgICAgICAgICAgc3RybmNweShsaWJyYXJ5UGF0aCwgZmlsZU5hbWUsIGNoYXJzX3RvX2V4dHJhY3QpOworICAgICAgICAgICBsaWJyYXJ5UGF0aFtjaGFyc190b19leHRyYWN0XSA9IDA7CisgICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgICAgICBpbmRleCsrOworICAgICAgIHJldCA9IHNobF9nZXQoaW5kZXgsICZkZXNjKTsKKyAgICB9CisKKyAgICBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uID0gbGlicmFyeVBhdGg7CisKKyAgICBpZiAoWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudEZpbmRMaWIpOworICAgIH0KIH0KIAogCkBAIC0yMTEsMTUgKzI2NSwxNCBAQAogICAgIHsKICNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9NRVNTQUdFTE9BREVSKQogICAgICAgICByZXRWYWwgPSBuZXcgSUNVTXNnTG9hZGVyKG1zZ0RvbWFpbik7Ci0jZWxpZiBkZWZpbmVkIChYTUxfVVNFX0lDT05WX01FU1NBR0VMT0FERVIpCi0gICAgICAgIHJldFZhbCA9IG5ldyBNc2dDYXRhbG9nTG9hZGVyKG1zZ0RvbWFpbik7CiAjZWxzZQorICAgICAgICAvLyBzYW1lIGFzIC1EWE1MX1VTRV9JTk1FTV9NRVNTQUdFTE9BREVSCiAgICAgICAgIHJldFZhbCA9IG5ldyBJbk1lbU1zZ0xvYWRlcihtc2dEb21haW4pOwogI2VuZGlmCiAgICAgfQogICAgIGNhdGNoKC4uLikKICAgICB7Ci0gICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vRGVmVHJhbnNjb2Rlcik7CisgICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRMb2FkTXNnRG9tYWluKTsKICAgICB9CiAgICAgcmV0dXJuIHJldFZhbDsKIH0KQEAgLTI0MCw2ICsyOTMsNyBAQAogICAgIC8vCiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqIHhtbDRjSW50bERpckVudlZhciA9ICJJQ1VfREFUQSI7CisgICAgY2hhciAqICAgICAgICAgICAgICBpbnRsUGF0aCAgICAgICAgPSAwOwogCiAgICAgLy8KICAgICAvLyBDaGVjayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSAnSUNVX0RBVEEnIGlzIHNldC4KQEAgLTI1MCw3ICszMDQsNyBAQAogICAgIGlmIChlbnZWYWwgIT0gTlVMTCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBwYXRoTGVuICA9IHN0cmxlbihlbnZWYWwpOwotICAgICAgICBjaGFyKiAgICAgICAgaW50bFBhdGggPSBuZXcgY2hhcltwYXRoTGVuICsgMl07CisgICAgICAgIGludGxQYXRoID0gbmV3IGNoYXJbcGF0aExlbiArIDJdOwogCiAgICAgICAgIHN0cmNweSgoY2hhciAqKSBpbnRsUGF0aCwgZW52VmFsKTsKICAgICAgICAgaWYgKGVudlZhbFtwYXRoTGVuIC0gMV0gIT0gJy8nKQpAQCAtMjY1LDYzICszMTksMzEgQEAKICAgICB9CiAKICAgICAvLwotICAgIC8vICBJZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGVudmlyb25tZW50IHZhciwgc28gbGV0cyB0cnkgdG8gZ28gdGhlIGF1dG8KLSAgICAvLyAgc2VhcmNoIHJvdXRlLgorICAgIC8vICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSUNVX0RBVEEgaXMgbm90IHNldCwgYXNzdW1lIHRoYXQgdGhlCisgICAgLy8gIGNvbnZlcnRlciBmaWxlcyBhcmUgc3RvcmVkIHJlbGF0aXZlIHRvIHRoZSBYZXJjZXMtQyBsaWJyYXJ5LgogICAgIC8vCiAKLSAgICBjaGFyIGxpYk5hbWVbMjU2XTsKLSAgICBzdHJjcHkobGliTmFtZSwgWE1MNENfRExMTmFtZSk7Ci0gICAgc3RyY2F0KGxpYk5hbWUsIGdYTUw0Q1ZlcnNpb25TdHIpOwotICAgIHN0cmNhdChsaWJOYW1lLCAiLnNsIik7CisgICAgdW5zaWduZWQgaW50ICBsZW50ID0gc3RybGVuKFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIi9pY3UvZGF0YS8iKSArIDE7CisgICAgaW50bFBhdGggPSBuZXcgY2hhcltsZW50XTsKKyAgICBzdHJjcHkoaW50bFBhdGgsIFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24pOworICAgIHN0cmNhdChpbnRsUGF0aCwgIi9pY3UvZGF0YS8iKTsKIAotICAgIHNobF9kZXNjcmlwdG9yKiBkZXNjID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgcmV0ID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgaW5kZXggPSAxOworICAgIElDVVRyYW5zU2VydmljZTo6c2V0SUNVUGF0aChpbnRsUGF0aCk7CisgICAgZGVsZXRlIGludGxQYXRoOwogCi0gICAgcmV0ID0gc2hsX2dldChpbmRleCwgJmRlc2MpOwotICAgIHdoaWxlIChyZXQgIT0gLTEpCi0gICAgewotICAgICAgIGNoYXIqIGZpbGVOYW1lID0gZGVzYy0+ZmlsZW5hbWU7Ci0gICAgICAgaWYgKHN0cnN0cihmaWxlTmFtZSwgbGliTmFtZSkgIT0gTlVMTCkKLSAgICAgICB7Ci0gICAgICAgICAgIGNoYXIqIGxhc3RTbGFzaCA9IHN0cnJjaHIoZmlsZU5hbWUsICcvJyk7Ci0gICAgICAgICAgIHNpemVfdCBjaGFyc190b19leHRyYWN0ID0gbGFzdFNsYXNoIC0gZmlsZU5hbWU7Ci0gICAgICAgICAgIGNoYXIgKmxpYlBhdGhOYW1lID0gbmV3IGNoYXJbY2hhcnNfdG9fZXh0cmFjdCArIDFdOwotICAgICAgICAgICBzdHJuY3B5KGxpYlBhdGhOYW1lLCBmaWxlTmFtZSwgY2hhcnNfdG9fZXh0cmFjdCk7Ci0gICAgICAgICAgIGxpYlBhdGhOYW1lW2NoYXJzX3RvX2V4dHJhY3RdID0gMDsKLSAgICAgICAgICAgZmdJbnRsUGF0aCA9IG5ldyBjaGFyW3N0cmxlbihsaWJQYXRoTmFtZSkrIHN0cmxlbigiL2ljdS9kYXRhLyIpKzFdOwotICAgICAgICAgICBzdHJjcHkoKGNoYXIgKikgZmdJbnRsUGF0aCwgbGliUGF0aE5hbWUpOwotICAgICAgICAgICBzdHJjYXQoKGNoYXIgKikgZmdJbnRsUGF0aCwgIi9pY3UvZGF0YS8iKTsKLSAgICAgICAgICAgZGVsZXRlIGxpYlBhdGhOYW1lOwotICAgICAgICAgICBicmVhazsKLSAgICAgICB9Ci0gICAgICAgaW5kZXgrKzsKLSAgICAgICByZXQgPSBzaGxfZ2V0KGluZGV4LCAmZGVzYyk7Ci0gICAgfQotCi0gICAgaWYgKGZnSW50bFBhdGggPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICJGYXRhbCBlcnJvcjogQ291bGQgbm90IGZpbmQgL2ljdS9kYXRhIHJlbGF0aXZlIHRvICVzIFxuIiwKLSAgICAgICAgICAgICAgICBsaWJOYW1lKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIAotICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgd2hpbGUgdHJ5aW5nIHRvIGF1dG8gZGV0ZWN0IHRoZSBsb2NhdGlvbiAiKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJvZiB0aGUgY29udmVydGVyIGZpbGVzLlxuIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgQW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnSUNVX0RBVEEnIGlzICIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vdCBkZWZpbmVkLlxuIik7Ci0gICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlKTsKLSAgICB9Ci0KLSAgICBJQ1VUcmFuc1NlcnZpY2U6OnNldElDVVBhdGgoZmdJbnRsUGF0aCk7CiAgICAgcmV0dXJuIG5ldyBJQ1VUcmFuc1NlcnZpY2U7CiAKLSNlbHNlIC8vIFVzZSBOYXRpdmUgdHJhbnNjb2Rpbmcgc2VydmljZQorI2Vsc2UKIAorICAgIC8vIFVzZSBuYXRpdmUgdHJhbnNjb2Rpbmcgc2VydmljZXMuCisgICAgLy8gc2FtZSBhcyAtRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUgogICAgIHJldHVybiBuZXcgSWNvbnZUcmFuc1NlcnZpY2U7CiAKICNlbmRpZgotfQorCit9IC8vIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VUcmFuc1NlcnZpY2UKKwogCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzMyLDIyICszNTQsMjMgQEAKICAgICAvLwogICAgIC8vICBXZSBqdXN0IHByaW50IGEgbWVzc2FnZSBhbmQgZXhpdAogICAgIC8vCisgICAgCiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiVGhlIFhNTDRDIHN5c3RlbSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuXG4iKTsKKyAgICAgICAgIlRoZSBYZXJjZXMtQyBzeXN0ZW0gY291bGQgbm90IGJlIGluaXRpYWxpemVkLlxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiVGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBmb3IgdGhpcyBmYWlsdXJlIGlzIHRoZSBpbmFiaWxpdHkgdG8gZmluZFxuIik7CisgICAgICAgICJJZiB5b3UgYXJlIHVzaW5nIElDVSwgdGhlbiB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGZvciB0aGlzIGZhaWx1cmVcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgInRoZSBJQ1UgY292ZXJ0ZXIgZmlsZXMsIGlmIHlvdSBhcmUgdXNpbmcgSUNVLiBUaGUgY29udmVydGVyIGZpbGVzXG4iKTsKKyAgICAgICAgImlzIHRoZSBpbmFiaWxpdHkgdG8gZmluZCB0aGUgSUNVIGNvdmVydGVyIGZpbGVzLiBUaGUgY29udmVydGVyIGZpbGVzXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJoYXZlIHRoZSBleHRlbnNpb24gLmNudiBhbmQgZXhpc3QgaW4gYSBkaXJlY3RvcnkgJ2ljdS9kYXRhJyByZWxhdGl2ZVxuIik7CisgICAgICAgICJoYXZlIHRoZSBleHRlbnNpb24gLmNudiBhbmQgZXhpc3QgaW4gYSBkaXJlY3RvcnkgJ2ljdS9kYXRhJyByZWxhdGl2ZVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAidG8gdGhlIFhNTDRDIHNoYXJlZCBsaWJyYXJ5LiBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGNvbnZlcnRlciBmaWxlc1xuIik7CisgICAgICAgICJ0byB0aGUgWGVyY2VzLUMgc2hhcmVkIGxpYnJhcnkuIElmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgY29udmVydGVyIGZpbGVzXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuIik7CisgICAgICAgICJpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiJ0lDVV9EQVRBJyB0byBwb2ludCBkaXJlY3RseSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlXG4iKTsKKyAgICAgICAgIidJQ1VfREFUQScgdG8gcG9pbnQgZGlyZWN0bHkgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiY29udmVydGVyIGZpbGVzLlxuIik7CisgICAgICAgICJjb252ZXJ0ZXIgZmlsZXMuXG4iKTsKICAgICAKICAgICBleGl0KC0xKTsKIH0KQEAgLTQ3NywxMiArNTAwLDEyIEBACiAgICAgLy8gIGFzIFVuaWNvZGUgYWx3YXlzCiAgICAgLy8KICAgICBjaGFyKiBuZXdTcmMgPSBYTUxTdHJpbmc6OnRyYW5zY29kZShzcmNQYXRoKTsKKyAgICBBcnJheUphbml0b3I8Y2hhcj4gIGphblRleHQobmV3U3JjKTsKIAogICAgIC8vIFVzZSBhIGxvY2FsIGJ1ZmZlciB0aGF0IGlzIGJpZyBlbm91Z2ggZm9yIHRoZSBsYXJnZXN0IGxlZ2FsIHBhdGguCiAgICAgLy8gTm90ZSAjMTE4NjogZGlyTmFtZSgpIGlzIG5vdCB0aHJlYWQgc2FmZS4KIAogICAgIGNoYXIqIHRtcFBhdGggPSBkaXJuYW1lKG5ld1NyYyk7IC8vIGRpcm5hbWUoKSBuZXZlciByZXR1cm5zIE5VTEwuCi0gICAgZGVsZXRlIFtdIG5ld1NyYzsKIAogICAgIGNoYXIqIG5ld1hNTFN0cmluZyA9IG5ldyBjaGFyW3N0cmxlbih0bXBQYXRoKSArIDJdOwogICAgIEFycmF5SmFuaXRvcjxjaGFyPiBuZXdKYW5pdG9yKG5ld1hNTFN0cmluZyk7CkBAIC01MTYsOCArNTM5LDM2IEBACiAvLyAgTXV0ZXggbWV0aG9kcyAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZiAhZGVmaW5lZCAoQVBQX05PX1RIUkVBRFMpCisjaWYgIWRlZmluZWQoQVBQX05PX1RIUkVBRFMpCiAKK3ZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpCit7CisgICAgcHRocmVhZF9tdXRleF90KiBtdXRleCA9IG5ldyBwdGhyZWFkX211dGV4X3Q7CisgICAgcHRocmVhZF9tdXRleGF0dHJfdCogIGF0dHIgPSBuZXcgcHRocmVhZF9tdXRleGF0dHJfdDsKKworI2lmIGRlZmluZWQoWE1MX1VTRV9EQ0UpCisgICAgcHRocmVhZF9tdXRleGF0dHJfY3JlYXRlKGF0dHIpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAoYXR0ciwgTVVURVhfUkVDVVJTSVZFX05QKTsKKyAgICBpZiAocHRocmVhZF9tdXRleF9pbml0KG11dGV4LCAqYXR0cikpCisgICAgeworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90Q3JlYXRlKTsKKyAgICB9CisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVsZXRlKGF0dHIpOworI2Vsc2UKKyAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KGF0dHIpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQobXV0ZXgsIGF0dHIpKQorICAgIHsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdENyZWF0ZSk7CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koYXR0cik7CisjZW5kaWYKKyAgICBkZWxldGUgYXR0cjsKKworICAgIHJldHVybiAodm9pZCopIG11dGV4OworfQogCiB2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OmNsb3NlTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQogewpAQCAtNTQzLDE4ICs1OTQsNiBAQAogICAgIH0KIH0KIAotdm9pZCogWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCkKLXsKLSAgICBwdGhyZWFkX211dGV4X3QqIG11dGV4ID0gbmV3IHB0aHJlYWRfbXV0ZXhfdDsKLQotICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQobXV0ZXgsIHB0aHJlYWRfbXV0ZXhhdHRyX2RlZmF1bHQpKQotICAgIHsKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdENyZWF0ZSk7Ci0gICAgfQotICAgIHJldHVybiAodm9pZCopIG11dGV4OwotfQotCiB2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnVubG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKIHsKICAgICBpZiAobXR4SGFuZGxlICE9IE5VTEwpCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9QbGF0Zm9ybXMvSVJJWC9JUklYRGVmcy5ocHAgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvSVJJWC9JUklYRGVmcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzNDNiOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy91dGlsL1BsYXRmb3Jtcy9JUklYL0lSSVhEZWZzLmhwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorICogCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKKyAqIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCisgKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCisgKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKKyAqICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgorICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAorICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKyAqIAorICogNC4gVGhlIG5hbWVzICJYZXJjZXMiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKKyAqICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAorICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlXEBhcGFjaGUub3JnLgorICogCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIiwKKyAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIHdhcworICogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDE5OTksIEludGVybmF0aW9uYWwKKyAqIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuLCBodHRwOi8vd3d3LmlibS5jb20gLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQorICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICovCisKKy8qKgorICogJExvZyQKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8xNCAyMzo1MzozMSAgcmFodWxqCisgKiBSZW1vdmVkIHRoZSBvZmZlbmRpbmcgQ3RybC1NJ3MgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UKKyAqIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisgKgorICogUFI6CisgKiBPYnRhaW5lZCBmcm9tOgorICogU3VibWl0dGVkIGJ5OgorICogUmV2aWV3ZWQgYnk6CisgKgorICogUmV2aXNpb24gMS4xICAxOTk5LzEyLzAxIDE3OjE2OjE3ICByYWh1bGoKKyAqIEFkZGVkIHN1cHBvcnQgZm9yIElSSVggNi41LjUgdXNpbmcgU0dJIE1JUFNwcm8gQysrIDcuMyBhbmQgNy4yMSBnZW5lcmF0aW5nIDMyIGJpdCBvYmplY3RzLiBDaGFuZ2VzIHN1Ym1pdHRlZCBieSBNYXJjIFN0dWVzc2VsCisgKgorICovCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSVJJWCBydW5zIGluIGJpZyBlbmRpYW4gbW9kZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgRU5ESUFOTU9ERV9CSUcKK3R5cGVkZWYgdm9pZCogRmlsZUhhbmRsZTsKKwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvUGxhdGZvcm1zL0lSSVgvSVJJWFBsYXRmb3JtVXRpbHMuY3BwIGIvc3JjL3V0aWwvUGxhdGZvcm1zL0lSSVgvSVJJWFBsYXRmb3JtVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YWJmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvSVJJWC9JUklYUGxhdGZvcm1VdGlscy5jcHAKQEAgLTAsMCArMSw2ODEgQEAKKy8qCisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKiAKKyAqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAorICogcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIAorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKKyAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICogCisgKiA0LiBUaGUgbmFtZXMgIlhlcmNlcyIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCisgKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVcQGFwYWNoZS5vcmcuCisgKiAKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgd2FzCisgKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAorICogQnVzaW5lc3MgTWFjaGluZXMsIEluYy4sIGh0dHA6Ly93d3cuaWJtLmNvbSAuICBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICogb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCisgKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisgKi8KKworLyoqCisgKiAkTG9nJAorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzE0IDIzOjUzOjMyICByYWh1bGoKKyAqIFJlbW92ZWQgdGhlIG9mZmVuZGluZyBDdHJsLU0ncyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorICogbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyAqCisgKiBQUjoKKyAqIE9idGFpbmVkIGZyb206CisgKiBTdWJtaXR0ZWQgYnk6CisgKiBSZXZpZXdlZCBieToKKyAqCisgKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTIvMDEgMTc6MTY6MTggIHJhaHVsagorICogQWRkZWQgc3VwcG9ydCBmb3IgSVJJWCA2LjUuNSB1c2luZyBTR0kgTUlQU3BybyBDKysgNy4zIGFuZCA3LjIxIGdlbmVyYXRpbmcgMzIgYml0IG9iamVjdHMuIENoYW5nZXMgc3VibWl0dGVkIGJ5IE1hcmMgU3R1ZXNzZWwKKyAqCisgKi8KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbmNsdWRlcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZm5kZWYgQVBQX05PX1RIUkVBRFMKKyNpbmNsdWRlICAgIDxwdGhyZWFkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgICAgPHVuaXN0ZC5oPgorI2luY2x1ZGUgICAgPHN0ZGlvLmg+CisjaW5jbHVkZSAgICA8c3RkbGliLmg+CisjaW5jbHVkZSAgICA8ZXJybm8uaD4KKyNpbmNsdWRlICAgIDxsaWJnZW4uaD4KKyNpbmNsdWRlICAgIDxzeXMvdGltZWIuaD4KKyNpbmNsdWRlICAgIDxzdHJpbmcuaD4KKyNpbmNsdWRlICAgIDx1dGlsL1BsYXRmb3JtVXRpbHMuaHBwPgorI2luY2x1ZGUgICAgPHV0aWwvUnVudGltZUV4Y2VwdGlvbi5ocHA+CisjaW5jbHVkZSAgICA8dXRpbC9KYW5pdG9yLmhwcD4KKyNpbmNsdWRlICAgIDx1dGlsL011dGV4ZXMuaHBwPgorI2luY2x1ZGUgICAgPHV0aWwvWE1MU3RyaW5nLmhwcD4KKyNpbmNsdWRlICAgIDx1dGlsL1hNTFVuaS5ocHA+CisKKworI2lmIGRlZmluZWQoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKKyAgICAjaW5jbHVkZSA8dXRpbC9UcmFuc2NvZGVycy9JQ1UvSUNVVHJhbnNTZXJ2aWNlLmhwcD4KKyNlbHNlCisgICAgLy8gVXNlIG5hdGl2ZSB0cmFuc2NvZGVyLiBTYW1lIGFzIC1EWE1MX1VTRV9OQVRJVkVfVFJBTlNDT0RFUgorICAgICNpbmNsdWRlIDx1dGlsL1RyYW5zY29kZXJzL0ljb252L0ljb252VHJhbnNTZXJ2aWNlLmhwcD4KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIpCisgICAgI2luY2x1ZGUgPHV0aWwvTXNnTG9hZGVycy9JQ1UvSUNVTXNnTG9hZGVyLmhwcD4KKworI2Vsc2UKKyAgICAvLyBTYW1lIGFzIC1EWE1MX1VTRV9JTk1FTV9NRVNTQUdFTE9BREVSCisgICAgI2luY2x1ZGUgPHV0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9Jbk1lbU1zZ0xvYWRlci5ocHA+CisjZW5kaWYKKworCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIExvY2FsIE1ldGhvZHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgdm9pZCBXcml0ZUNoYXJTdHIoIEZJTEUqIHN0cmVhbSwgY29uc3QgY2hhciogY29uc3QgdG9Xcml0ZSkKK3sKKyAgICBpZiAoZnB1dHModG9Xcml0ZSwgc3RyZWFtKSA9PSBFT0YpCisgICAgeworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OlN0cm1fU3RkRXJyV3JpdGVGYWlsdXJlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIFdyaXRlVVN0clN0ZEVyciggY29uc3QgWE1MQ2gqIGNvbnN0IHRvV3JpdGUpCit7CisgICAgY2hhciogdG1wVmFsID0gWE1MU3RyaW5nOjp0cmFuc2NvZGUodG9Xcml0ZSk7CisgICAgQXJyYXlKYW5pdG9yPGNoYXI+IGphblRleHQodG1wVmFsKTsKKyAgICBpZiAoZnB1dHModG1wVmFsLCBzdGRlcnIpID09IEVPRikKKyAgICB7CisgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OlN0cm1fU3RkRXJyV3JpdGVGYWlsdXJlKTsKKyAgIH0KK30KKworc3RhdGljIHZvaWQgV3JpdGVVU3RyU3RkT3V0KCBjb25zdCBYTUxDaCogY29uc3QgdG9Xcml0ZSkKKyB7CisgICAgY2hhciogdG1wVmFsID0gWE1MU3RyaW5nOjp0cmFuc2NvZGUodG9Xcml0ZSk7CisgICAgQXJyYXlKYW5pdG9yPGNoYXI+IGphblRleHQodG1wVmFsKTsKKyAgICBpZiAoZnB1dHModG1wVmFsLCBzdGRvdXQpID09IEVPRikKKyAgICB7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6U3RybV9TdGRPdXRXcml0ZUZhaWx1cmUpOworICAgIH0KK30KKworWE1MTmV0QWNjZXNzb3IqIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VOZXRBY2Nlc3NvcigpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBTdGFuZGFyZCBvdXQvZXJyb3Igc3VwcG9ydAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkRXJyKGNvbnN0IGNoYXIqIGNvbnN0IHRvV3JpdGUpCit7CisgICAgV3JpdGVDaGFyU3RyKHN0ZGVyciwgdG9Xcml0ZSk7Cit9Cit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OndyaXRlVG9TdGRFcnIoY29uc3QgWE1MQ2gqIGNvbnN0IHRvV3JpdGUpCit7CisgICAgV3JpdGVVU3RyU3RkRXJyKHRvV3JpdGUpOworfQordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkT3V0KGNvbnN0IFhNTENoKiBjb25zdCB0b1dyaXRlKQoreworICAgIFdyaXRlVVN0clN0ZE91dCh0b1dyaXRlKTsKK30KK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6d3JpdGVUb1N0ZE91dChjb25zdCBjaGFyKiBjb25zdCB0b1dyaXRlKQoreworICAgIFdyaXRlQ2hhclN0cihzdGRvdXQsIHRvV3JpdGUpOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFhNTFBsYXRmb3JtVXRpbHM6IFBsYXRmb3JtIGluaXQgbWV0aG9kCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIFhNTE11dGV4IGF0b21pY09wc011dGV4OworCisKKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpwbGF0Zm9ybUluaXQoKQoreworICAgIC8vCisgICAgLy8gVGhlIGF0b21pY09wcyBtdXRleCBuZWVkcyB0byBiZSBjcmVhdGVkIGVhcmx5LgorICAgIC8vIE5vcm1hbGx5LCBtdXRleGVzIGFyZSBjcmVhdGVkIG9uIGZpcnN0IHVzZSwgYnV0IHRoZXJlIGlzIGEKKyAgICAvLyBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gY29tcGFyZUFuZEV4Y2hhbmdlKCkgYW5kCisgICAgLy8gbXV0ZXggY3JlYXRpb24gdGhhdCBtdXN0IGJlIGJyb2tlbi4KKyAgICBhdG9taWNPcHNNdXRleC5mSGFuZGxlID0gWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCk7CisKKyAgICAvLyBIZXJlIHlvdSB3b3VsZCBhbHNvIHNldCB0aGUgZmdMaWJMb2NhdGlvbiBnbG9iYWwgdmFyaWFibGUKKyAgICAvLyBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uIGlzIHRoZSB2YXJpYWJsZSB0byBiZSBzZXQKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiAgbGliRW52VmFyID0gIkxEX0xJQlJBUllfUEFUSCI7CisgICAgY2hhciogICAgICAgICAgICAgICBsaWJyYXJ5UGF0aCA9IDA7CisgICAgY2hhciAgICAgICAgICAgICAgICBsaWJOYW1lWzI1Nl07CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIGxpYnJhcnkgbmFtZSBmcm9tIHRoZSBnbG9iYWwgdmFyaWFibGVzCisKKyAgICBzdHJjcHkobGliTmFtZSwgWE1MNENfRExMTmFtZSk7CisgICAgc3RyY2F0KGxpYk5hbWUsIGdYTUw0Q1ZlcnNpb25TdHIpOworICAgIHN0cmNhdChsaWJOYW1lLCAiLnNvIik7CisKKyAgICBjaGFyKiBsaWJFbnZWYXIgPSBnZXRlbnYoc2hhcmVkTGliRW52VmFyKTsKKyAgICBjaGFyKiBsaWJQYXRoID0gTlVMTDsKKworICAgIGlmIChsaWJFbnZWYXIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRGaW5kTGliKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEl0cyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgY29weSBiZWNhdXNlIHN0cnRvaygpIG1vZGlmaWVzIHRoZQorICAgIC8vIHN0cmluZyBhcyBpdCByZXR1cm5zIHRva2Vucy4gV2UgZG9uJ3Qgd2FudCB0byBtb2RpZnkgdGhlIHN0cmluZworICAgIC8vIHJldHVybmVkIHRvIGJ5IGdldGVudigpLgorICAgIC8vCisKKyAgICBsaWJQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYkVudlZhcikgKyAxXTsKKyAgICBzdHJjcHkobGliUGF0aCwgbGliRW52VmFyKTsKKworCisgICAgLy8gRmlyc3QgZG8gdGhlIHNlYXJjaGluZyBwcm9jZXNzIGZvciB0aGUgZmlyc3QgZGlyZWN0b3J5IGxpc3RpbmcKKworICAgIGNoYXIqICBhbGxQYXRocyA9IGxpYlBhdGg7CisgICAgY2hhciogIGxpYlBhdGhOYW1lOworCisgICAgd2hpbGUgKChsaWJQYXRoTmFtZSA9IHN0cnRvayhhbGxQYXRocywgIjoiKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEZJTEUqICBkdW1teUZwdHIgPSAwOworICAgICAgICBhbGxQYXRocyA9IDA7CisKKyAgICAgICAgY2hhciogbGliZmlsZSA9IG5ldyBjaGFyW3N0cmxlbihsaWJQYXRoTmFtZSkgKyBzdHJsZW4obGliTmFtZSkgKyAyXTsKKyAgICAgICAgc3RyY3B5KGxpYmZpbGUsIGxpYlBhdGhOYW1lKTsKKyAgICAgICAgc3RyY2F0KGxpYmZpbGUsICIvIik7CisgICAgICAgIHN0cmNhdChsaWJmaWxlLCBsaWJOYW1lKTsKKworICAgICAgICBkdW1teUZwdHIgPSAoRklMRSAqKSBmb3BlbihsaWJmaWxlLCAicmIiKTsKKyAgICAgICAgZGVsZXRlIFtdIGxpYmZpbGU7CisgICAgICAgIGlmIChkdW1teUZwdHIgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgZmNsb3NlKGR1bW15RnB0cik7CisgICAgICAgICAgICBsaWJyYXJ5UGF0aCA9IG5ldyBjaGFyW3N0cmxlbihsaWJQYXRoTmFtZSkrMV07CisgICAgICAgICAgICBzdHJjcHkoKGNoYXIgKikgbGlicmFyeVBhdGgsIGxpYlBhdGhOYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IC8vIHdoaWxlCisKKyAgICBkZWxldGUgbGliUGF0aDsKKworICAgIFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24gPSBsaWJyYXJ5UGF0aDsKKworICAgIGlmIChYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uID09IE5VTEwpCisgICAgeworICAgICAgICBwYW5pYyhYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19DYW50RmluZExpYik7CisgICAgfQorCit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgWE1MUGxhdGZvcm1VdGlsczogUHJpdmF0ZSBTdGF0aWMgTWV0aG9kcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vCisvLyAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBwYXJ0IG9mIHRoaXMgY2xhc3MKKy8vICB3aGVuIGNsaWVudCBjb2RlIGFza3MgdG8gaGF2ZSBvbmUgb2YgdGhlIHN1cHBvcnRlZCBtZXNzYWdlIHNldHMgbG9hZGVkLgorLy8KKworWE1MTXNnTG9hZGVyKiBYTUxQbGF0Zm9ybVV0aWxzOjpsb2FkQU1zZ1NldChjb25zdCBYTUxDaCogY29uc3QgbXNnRG9tYWluKQoreworICAgIFhNTE1zZ0xvYWRlciogcmV0VmFsOworICAgIHRyeQorICAgIHsKKyNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9NRVNTQUdFTE9BREVSKQorICAgICAgICByZXRWYWwgPSBuZXcgSUNVTXNnTG9hZGVyKG1zZ0RvbWFpbik7CisjZWxzZQorICAgICAgICAvLyBzYW1lIGFzIC1EWE1MX1VTRV9JTk1FTV9NRVNTQUdFTE9BREVSCisgICAgICAgIHJldFZhbCA9IG5ldyBJbk1lbU1zZ0xvYWRlcihtc2dEb21haW4pOworI2VuZGlmCisgICAgfQorCisgICAgY2F0Y2goLi4uKQorICAgIHsKKyAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudExvYWRNc2dEb21haW4pOworICAgIH0KKyAgICByZXR1cm4gcmV0VmFsOworfQorCisKKy8vCisvLyAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHZlcnkgZWFybHkgaW4gdGhlIGJvb3RzdHJhcHBpbmcgcHJvY2Vzcy4gVGhpcyBndXkKKy8vICBtdXN0IGNyZWF0ZSBhIHRyYW5zY29kaW5nIHNlcnZpY2UgYW5kIHJldHVybiBpdC4gSXQgY2Fubm90IHVzZSBhbnkgc3RyaW5nCisvLyAgbWV0aG9kcywgYW55IHRyYW5zY29kaW5nIHNlcnZpY2VzLCB0aHJvdyBhbnkgZXhjZXB0aW9ucywgZXRjLi4uIEl0IGp1c3QKKy8vICBtYWtlcyBhIHRyYW5zY29kaW5nIHNlcnZpY2UgYW5kIHJldHVybnMgaXQsIG9yIHJldHVybnMgemVybyBvbiBmYWlsdXJlLgorLy8KKworWE1MVHJhbnNTZXJ2aWNlKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlVHJhbnNTZXJ2aWNlKCkKK3sKKyNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9UUkFOU0NPREVSKQorICAgIC8vCisgICAgLy8gIFdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0byB0aGUgSW50bCBjb252ZXJ0ZXIgZmlsZXMuCisgICAgLy8KKworICAgIHN0YXRpYyBjb25zdCBjaGFyICogaWN1RGF0YUVudlZhciAgID0gIklDVV9EQVRBIjsKKyAgICBjaGFyICogICAgICAgICAgICAgIGludGxQYXRoICAgICAgICA9IDA7CisKKyAgICBjaGFyKiBlbnZWYWwgPSBnZXRlbnYoaWN1RGF0YUVudlZhcik7CisKKyAgICAvLyBDaGVjayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuLi4KKyAgICBpZiAoZW52VmFsICE9IE5VTEwpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgcGF0aExlbiA9IHN0cmxlbihlbnZWYWwpOworICAgICAgICBpbnRsUGF0aCA9IG5ldyBjaGFyW3BhdGhMZW4gKyAyXTsKKworICAgICAgICBzdHJjcHkoKGNoYXIgKikgaW50bFBhdGgsIGVudlZhbCk7CisgICAgICAgIGlmIChlbnZWYWxbcGF0aExlbiAtIDFdICE9ICcvJykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyY2F0KChjaGFyICopIGludGxQYXRoLCAiLyIpOworICAgICAgICB9CisKKyAgICAgICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKKyAgICAgICAgZGVsZXRlIGludGxQYXRoOworCisgICAgICAgIHJldHVybiBuZXcgSUNVVHJhbnNTZXJ2aWNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBJQ1VfREFUQSBpcyBub3Qgc2V0LCBhc3N1bWUgdGhhdCB0aGUKKyAgICAvLyAgY29udmVydGVyIGZpbGVzIGFyZSBzdG9yZWQgcmVsYXRpdmUgdG8gdGhlIFhlcmNlcy1DIGxpYnJhcnkuCisgICAgLy8KKworICAgIHVuc2lnbmVkIGludCAgbGVudCA9IHN0cmxlbihYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCIvaWN1L2RhdGEvIikgKyAxOworICAgIGludGxQYXRoID0gbmV3IGNoYXJbbGVudF07CisgICAgc3RyY3B5KGludGxQYXRoLCBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uKTsKKyAgICBzdHJjYXQoaW50bFBhdGgsICIvaWN1L2RhdGEvIik7CisKKyAgICBJQ1VUcmFuc1NlcnZpY2U6OnNldElDVVBhdGgoaW50bFBhdGgpOworICAgIGRlbGV0ZSBpbnRsUGF0aDsKKworICAgIHJldHVybiBuZXcgSUNVVHJhbnNTZXJ2aWNlOworCisKKyNlbHNlCisKKyAgICAvLyBVc2UgbmF0aXZlIHRyYW5zY29kaW5nIHNlcnZpY2VzLgorICAgIC8vIHNhbWUgYXMgLURYTUxfVVNFX0lOTUVNX01FU1NBR0VMT0FERVIKKyAgICByZXR1cm4gbmV3IEljb252VHJhbnNTZXJ2aWNlOworCisjZW5kaWYKKworfSAvLyBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlVHJhbnNTZXJ2aWNlCisKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBYTUxQbGF0Zm9ybVV0aWxzOiBUaGUgcGFuaWMgbWV0aG9kCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6cGFuaWMoY29uc3QgUGFuaWNSZWFzb25zIHJlYXNvbikKK3sKKyAgICAvLworICAgIC8vICBXZSBqdXN0IHByaW50IGEgbWVzc2FnZSBhbmQgZXhpdAorICAgIC8vCisgICAgCisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJUaGUgWGVyY2VzLUMgc3lzdGVtIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC5cbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiSWYgeW91IGFyZSB1c2luZyBJQ1UsIHRoZW4gdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBmb3IgdGhpcyBmYWlsdXJlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImlzIHRoZSBpbmFiaWxpdHkgdG8gZmluZCB0aGUgSUNVIGNvdmVydGVyIGZpbGVzLiBUaGUgY29udmVydGVyIGZpbGVzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImhhdmUgdGhlIGV4dGVuc2lvbiAuY252IGFuZCBleGlzdCBpbiBhIGRpcmVjdG9yeSAnaWN1L2RhdGEnIHJlbGF0aXZlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgInRvIHRoZSBYZXJjZXMtQyBzaGFyZWQgbGlicmFyeS4gSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb252ZXJ0ZXIgZmlsZXNcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24sIHlvdSBuZWVkIHRvIHNldCB1cCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiJ0lDVV9EQVRBJyB0byBwb2ludCBkaXJlY3RseSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImNvbnZlcnRlciBmaWxlcy5cbiIpOworICAgIAorICAgIGV4aXQoLTEpOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFhNTFBsYXRmb3JtVXRpbHM6IEZpbGUgTWV0aG9kcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit1bnNpZ25lZCBpbnQgWE1MUGxhdGZvcm1VdGlsczo6Y3VyRmlsZVBvcyhGaWxlSGFuZGxlIHRoZUZpbGUpCit7CisgICAgaW50IGN1clBvcyA9IGZ0ZWxsKCAoRklMRSopdGhlRmlsZSk7CisgICAgaWYgKGN1clBvcyA9PSAtMSkKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0U2l6ZSk7CisKKyAgICByZXR1cm4gKHVuc2lnbmVkIGludCljdXJQb3M7Cit9CisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VGaWxlKEZpbGVIYW5kbGUgdGhlRmlsZSkKK3sKKyAgICBpZiAoZmNsb3NlKChGSUxFKil0aGVGaWxlKSkKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90Q2xvc2VGaWxlKTsKK30KKwordW5zaWduZWQgaW50IFhNTFBsYXRmb3JtVXRpbHM6OmZpbGVTaXplKEZpbGVIYW5kbGUgdGhlRmlsZSkKK3sKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24KKyAgICBsb25nICBpbnQgY3VyUG9zID0gZnRlbGwoKEZJTEUqKSB0aGVGaWxlKTsKKyAgICBpZiAoY3VyUG9zID09IC0xKQorICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RHZXRDdXJQb3MpOworCisgICAgLy8gU2VlayB0byB0aGUgZW5kIGFuZCBzYXZlIHRoYXQgdmFsdWUgZm9yIHJldHVybgorICAgICBpZiAoZnNlZWsoKEZJTEUqKSB0aGVGaWxlLCAwLCBTRUVLX0VORCkpCisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFNlZWtUb0VuZCk7CisKKyAgICBsb25nIGludCByZXRWYWwgPSBmdGVsbCgoRklMRSopdGhlRmlsZSk7CisgICAgaWYgKHJldFZhbCA9PSAtMSkKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90U2Vla1RvRW5kKTsKKworICAgIC8vIEFuZCBwdXQgdGhlIHBvaW50ZXIgYmFjaworCisgICAgaWYgKGZzZWVrKCAoRklMRSopdGhlRmlsZSwgY3VyUG9zLCBTRUVLX1NFVCkgKQorICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RTZWVrVG9Qb3MpOworCisgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpcmV0VmFsOworfQorCitGaWxlSGFuZGxlIFhNTFBsYXRmb3JtVXRpbHM6Om9wZW5GaWxlKGNvbnN0IHVuc2lnbmVkIHNob3J0KiBjb25zdCBmaWxlTmFtZSkKK3sKKyAgICBjb25zdCBjaGFyKiB0bXBGaWxlTmFtZSA9IFhNTFN0cmluZzo6dHJhbnNjb2RlKGZpbGVOYW1lKTsKKyAgICBBcnJheUphbml0b3I8Y2hhcj4gamFuVGV4dCgoY2hhciopdG1wRmlsZU5hbWUpOworICAgIEZpbGVIYW5kbGUgcmV0VmFsID0gKEZJTEUqKWZvcGVuKCB0bXBGaWxlTmFtZSAsICJyYiIgKTsKKworICAgIGlmIChyZXRWYWwgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJldFZhbDsKK30KKworCisKK0ZpbGVIYW5kbGUgWE1MUGxhdGZvcm1VdGlsczo6b3BlblN0ZEluSGFuZGxlKCkKK3sKKyAgICByZXR1cm4gKEZpbGVIYW5kbGUpIGZkb3BlbihkdXAoMCksICJyYiIpOworfQorCisKK3Vuc2lnbmVkIGludAorWE1MUGxhdGZvcm1VdGlsczo6cmVhZEZpbGVCdWZmZXIoIEZpbGVIYW5kbGUgICAgICAgICAgdGhlRmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGNvbnN0IHVuc2lnbmVkIGludCAgdG9SZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgWE1MQnl0ZSogY29uc3QgICAgICB0b0ZpbGwpCit7CisgICAgc2l6ZV90IG5vT2ZJdGVtc1JlYWQgPSBmcmVhZCgodm9pZCopIHRvRmlsbCwgMSwgdG9SZWFkLCAoRklMRSopdGhlRmlsZSk7CisKKyAgICBpZihmZXJyb3IoKEZJTEUqKXRoZUZpbGUpKQorICAgIHsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90UmVhZEZyb21GaWxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gKHVuc2lnbmVkIGludClub09mSXRlbXNSZWFkOworfQorCisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6cmVzZXRGaWxlKEZpbGVIYW5kbGUgdGhlRmlsZSkKK3sKKyAgICAvLyBTZWVrIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZQorICAgIGlmIChmc2VlaygoRklMRSopdGhlRmlsZSwgMCwgU0VFS19TRVQpKQorICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RSZXNldEZpbGUpOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFhNTFBsYXRmb3JtVXRpbHM6IFRpbWluZyBNZXRob2RzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordW5zaWduZWQgbG9uZyBYTUxQbGF0Zm9ybVV0aWxzOjpnZXRDdXJyZW50TWlsbGlzKCkKK3sKKyAgICB0aW1lYiBhVGltZTsKKyAgICBmdGltZSgmYVRpbWUpOworICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoYVRpbWUudGltZSoxMDAwICsgYVRpbWUubWlsbGl0bSk7CisKK30KKworCitYTUxDaCogWE1MUGxhdGZvcm1VdGlsczo6Z2V0QmFzZVBhdGgoY29uc3QgWE1MQ2gqIGNvbnN0IHNyY1BhdGgpCit7CisKKyAgICAvLworICAgIC8vICBOT1RFOiBUSGUgcGF0aCBwcm92aWRlZCBoYXMgYWx3YXlzIGFscmVhZHkgYmVlbiBvcGVuZWQgc3VjY2Vzc2Z1bGx5LAorICAgIC8vICBzbyB3ZSBrbm93IHRoYXQgaXRzIG5vdCBzb21lIHBhdGhvbG9naWNhbCBmcmVha3kgcGF0aC4gSXQgY29tZXMgaW4KKyAgICAvLyAgaW4gbmF0aXZlIGZvcm1hdCwgYW5kIGdvZXMgb3V0IGFzIFVuaWNvZGUgYWx3YXlzCisgICAgLy8KKyAgICBjaGFyKiBuZXdTcmMgPSBYTUxTdHJpbmc6OnRyYW5zY29kZShzcmNQYXRoKTsKKyAgICBBcnJheUphbml0b3I8Y2hhcj4gamFuVGV4dChuZXdTcmMpOworCisgICAgLy8gVXNlIGEgbG9jYWwgYnVmZmVyIHRoYXQgaXMgYmlnIGVub3VnaCBmb3IgdGhlIGxhcmdlc3QgbGVnYWwgcGF0aAorICAgIC8vIE5vdGUgIzExODY6IGRpck5hbWUoKSBpcyBub3QgdGhyZWFkIHNhZmUuCisgICAgY2hhciogdG1wUGF0aCA9IGRpcm5hbWUobmV3U3JjKTsKKyAgICBpZiAoIXRtcFBhdGgpCisgICAgeworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RHZXRCYXNlUGF0aE5hbWUpOworICAgIH0KKworICAgIGNoYXIqIG5ld1hNTFN0cmluZyA9IG5ldyBjaGFyIFtzdHJsZW4odG1wUGF0aCkgKzJdOworICAgIEFycmF5SmFuaXRvcjxjaGFyPiBuZXdKYW5pdG9yKG5ld1hNTFN0cmluZyk7CisgICAgc3RyY3B5KG5ld1hNTFN0cmluZywgdG1wUGF0aCk7CisgICAgc3RyY2F0KG5ld1hNTFN0cmluZyAsICIvIik7CisKKyAgICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBwYXRoLCBpbiBVbmljb2RlIGZvcm1hdAorICAgIHJldHVybiBYTUxTdHJpbmc6OnRyYW5zY29kZShuZXdYTUxTdHJpbmcpOworfQorCisKK2Jvb2wgWE1MUGxhdGZvcm1VdGlsczo6aXNSZWxhdGl2ZShjb25zdCBYTUxDaCogY29uc3QgdG9DaGVjaykKK3sKKyAgICAvLyBDaGVjayBmb3IgcGF0aG9sb2dpY2FsIGNhc2Ugb2YgZW1wdHkgcGF0aAorICAgIGlmICghdG9DaGVja1swXSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8KKyAgICAvLyAgSWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCwgdGhlbiBpdCBjYW5ub3QgYmUgcmVsYXRpdmUuIFRoaXMgY292ZXJzCisgICAgLy8gIGJvdGggc29tZXRoaW5nIGxpa2UgIlxUZXN0XEZpbGUueG1sIiBhbmQgYW4gTlQgTGFuIHR5cGUgcmVtb3RlIHBhdGgKKyAgICAvLyAgdGhhdCBzdGFydHMgd2l0aCBhIG5vZGUgbGlrZSAiXFxNeU5vZGVcVGVzdFxGaWxlLnhtbCIuCisgICAgLy8KKyAgICBpZiAodG9DaGVja1swXSA9PSBYTUxDaCgnLycpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBFbHNlIGFzc3VtZSBpdHMgYSByZWxhdGl2ZSBwYXRoCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBNdXRleCBtZXRob2RzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWYgIWRlZmluZWQoQVBQX05PX1RIUkVBRFMpCisKK3ZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpCit7CisgICAgcHRocmVhZF9tdXRleF90KiBtdXRleCA9IG5ldyBwdGhyZWFkX211dGV4X3Q7CisgICAgcHRocmVhZF9tdXRleGF0dHJfdCogIGF0dHIgPSBuZXcgcHRocmVhZF9tdXRleGF0dHJfdDsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KGF0dHIpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAoYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlApOworICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQobXV0ZXgsIGF0dHIpKQorICAgIHsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdENyZWF0ZSk7CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koYXR0cik7CisgICAgZGVsZXRlIGF0dHI7CisgICAgcmV0dXJuICh2b2lkKikobXV0ZXgpOworCit9CisKKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpjbG9zZU11dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKKyAgICBpZiAobXR4SGFuZGxlICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAocHRocmVhZF9tdXRleF9kZXN0cm95KChwdGhyZWFkX211dGV4X3QqKSBtdHhIYW5kbGUpKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdERlc3Ryb3kpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBtdHhIYW5kbGU7CisgICAgfQorfQorCisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6bG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKKyAgICBpZiAobXR4SGFuZGxlICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrKChwdGhyZWFkX211dGV4X3QqKSBtdHhIYW5kbGUpKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdExvY2spOworICAgICAgICB9CisgICAgfQorfQorCisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6dW5sb2NrTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQoreworICAgIGlmIChtdHhIYW5kbGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChwdGhyZWFkX211dGV4X3VubG9jaygocHRocmVhZF9tdXRleF90KikgbXR4SGFuZGxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RVbmxvY2spOworICAgICAgICB9CisgICAgfQorfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgTWlzY2VsbGFuZW91cyBzeW5jaHJvbml6YXRpb24gbWV0aG9kcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCogWE1MUGxhdGZvcm1VdGlsczo6Y29tcGFyZUFuZFN3YXAodm9pZCoqICAgICAgICAgICAgdG9GaWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCB2b2lkKiBjb25zdCBuZXdWYWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3Qgdm9pZCogY29uc3QgdG9Db21wYXJlKQoreworICAgIFhNTE11dGV4TG9jayBsb2NrTXV0ZXgoJmF0b21pY09wc011dGV4KTsKKworICAgIHZvaWQgKnJldFZhbCA9ICp0b0ZpbGw7CisgICAgaWYgKCp0b0ZpbGwgPT0gdG9Db21wYXJlKQorICAgICAgICAqdG9GaWxsID0gKHZvaWQgKiluZXdWYWx1ZTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisKK2ludCBYTUxQbGF0Zm9ybVV0aWxzOjphdG9taWNJbmNyZW1lbnQoaW50ICZsb2NhdGlvbikKK3sKKyAgICBYTUxNdXRleExvY2sgbG9jYWxMb2NrKCZhdG9taWNPcHNNdXRleCk7CisKKyAgICByZXR1cm4gKytsb2NhdGlvbjsKK30KKworaW50IFhNTFBsYXRmb3JtVXRpbHM6OmF0b21pY0RlY3JlbWVudChpbnQgJmxvY2F0aW9uKQoreworICAgIFhNTE11dGV4TG9jayBsb2NhbExvY2soJmF0b21pY09wc011dGV4KTsKKworICAgIHJldHVybiAtLWxvY2F0aW9uOworfQorCisjZWxzZSAvLyAjaWYgIWRlZmluZWQgKEFQUF9OT19USFJFQURTKQorCit2b2lkKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKQoreworICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpjbG9zZU11dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKK30KKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpsb2NrTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQoreworfQorCit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnVubG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKK30KKwordm9pZCogWE1MUGxhdGZvcm1VdGlsczo6Y29tcGFyZUFuZFN3YXAgKHZvaWQqKiAgICAgICAgICAgICB0b0ZpbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogY29uc3QgIG5ld1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGNvbnN0ICB0b0NvbXBhcmUpCit7CisgICAgdm9pZCAqcmV0VmFsID0gKnRvRmlsbDsKKyAgICBpZiAoKnRvRmlsbCA9PSB0b0NvbXBhcmUpCisgICAgICAgKnRvRmlsbCA9ICh2b2lkICopbmV3VmFsdWU7CisgICAgcmV0dXJuIHJldFZhbDsKK30KKworaW50IFhNTFBsYXRmb3JtVXRpbHM6OmF0b21pY0luY3JlbWVudChpbnQgJmxvY2F0aW9uKQoreworICAgIHJldHVybiArK2xvY2F0aW9uOworfQorCitpbnQgWE1MUGxhdGZvcm1VdGlsczo6YXRvbWljRGVjcmVtZW50KGludCAmbG9jYXRpb24pCit7CisgICAgcmV0dXJuIC0tbG9jYXRpb247Cit9CisKKyNlbmRpZiAvLyBBUFBfTk9fVEhSRUFEUworCisKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1BsYXRmb3Jtcy9MaW51eC9MaW51eFBsYXRmb3JtVXRpbHMuY3BwIGIvc3JjL3V0aWwvUGxhdGZvcm1zL0xpbnV4L0xpbnV4UGxhdGZvcm1VdGlscy5jcHAKaW5kZXggN2NjNjM2NC4uMjFlMzRmZiAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvUGxhdGZvcm1zL0xpbnV4L0xpbnV4UGxhdGZvcm1VdGlscy5jcHAKKysrIGIvc3JjL3V0aWwvUGxhdGZvcm1zL0xpbnV4L0xpbnV4UGxhdGZvcm1VdGlscy5jcHAKQEAgLTU2LDggKzU2LDI0IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzowMSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTIvMTQgMjM6NTM6MzMgIHJhaHVsagorICogUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisgKiBsb2dzIHdoaWNoIHdhcyBnaXZpbmcgcGFja2FnaW5nIHByb2JsZW1zLgorICoKKyAqIFBSOgorICogT2J0YWluZWQgZnJvbToKKyAqIFN1Ym1pdHRlZCBieToKKyAqIFJldmlld2VkIGJ5OgorICoKKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8yMyAwMjowMDo0OCAgcmFodWxqCisgKiBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCisgKiBSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTcgMjI6MzU6MzMgIHJhaHVsagorICogUmVwbGFjZWQgZGVmYXVsdCBhdHRyIG11dGV4ZXMgd2l0aCByZWN1cnNpdmUgbXV0ZXhlcy4gQWxzbyBjb2RlIHdvcmtzIHdpdGggSUNVIHRyYW5zY29kaW5nIHNlcnZpY2UKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjAxICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNiAgMTk5OS8xMS8wOCAyMDo0NTozMCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY5LDcgKzg1LDcgQEAKIC8vICBJbmNsdWRlcwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZm5kZWYgQVBQX05PX1RIUkVBRFMKKyNpZiAhZGVmaW5lZChBUFBfTk9fVEhSRUFEUykKICNpbmNsdWRlICAgIDxwdGhyZWFkLmg+CiAjZW5kaWYKIApAQCAtODcsMjAgKzEwMywyNSBAQAogI2luY2x1ZGUgICAgPHV0aWwvWE1MU3RyaW5nLmhwcD4KICNpbmNsdWRlICAgIDx1dGlsL1hNTFVuaS5ocHA+CiAKLSNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9UUkFOU0NPREVSKQorCisjaWYgZGVmaW5lZChYTUxfVVNFX0lDVV9UUkFOU0NPREVSKQogICAgICNpbmNsdWRlIDx1dGlsL1RyYW5zY29kZXJzL0lDVS9JQ1VUcmFuc1NlcnZpY2UuaHBwPgotI2Vsc2UJLy8gdXNlIG5hdGl2ZSB0cmFuc2NvZGVyCisjZWxzZQorICAgIC8vIFVzZSBuYXRpdmUgdHJhbnNjb2Rlci4gU2FtZSBhcyAtRFhNTF9VU0VfTkFUSVZFX1RSQU5TQ09ERVIKICAgICAjaW5jbHVkZSA8dXRpbC9UcmFuc2NvZGVycy9JY29udi9JY29udlRyYW5zU2VydmljZS5ocHA+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQgKFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIpCisKKyNpZiBkZWZpbmVkKFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIpCiAgICAgI2luY2x1ZGUgPHV0aWwvTXNnTG9hZGVycy9JQ1UvSUNVTXNnTG9hZGVyLmhwcD4KLSNlbGlmIGRlZmluZWQgKFhNTF9VU0VfSUNPTlZfTUVTU0FHRUxPQURFUikKLSAgICAjaW5jbHVkZSA8dXRpbC9Nc2dMb2FkZXJzL01zZ0NhdGFsb2cvTXNnQ2F0YWxvZ0xvYWRlci5ocHA+Ci0jZWxzZQkvLyB1c2UgSW4tbWVtb3J5IG1lc3NhZ2UgbG9hZGVyCi0gICAgI2luY2x1ZGUgPHV0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9Jbk1lbU1zZ0xvYWRlci5ocHA+ICAgLy9oaW50IGZvciB0aGUgdXNlciB0byBpbmNsdWRlIHRoaXMgZmlsZS4KKworI2Vsc2UKKyAgICAvLyBTYW1lIGFzIC1EWE1MX1VTRV9JTk1FTV9NRVNTQUdFTE9BREVSCisgICAgI2luY2x1ZGUgPHV0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9Jbk1lbU1zZ0xvYWRlci5ocHA+CiAjZW5kaWYKIAorCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIExvY2FsIE1ldGhvZHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTEwLDcgKzEzMSw3IEBACiAgICAgaWYgKGZwdXRzKHRvV3JpdGUsIHN0cmVhbSkgPT0gRU9GKQogICAgIHsKICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKLQkJCQkgWE1MNENFeGNlcHRzOjpTdHJtX1N0ZEVycldyaXRlRmFpbHVyZSk7CisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6U3RybV9TdGRFcnJXcml0ZUZhaWx1cmUpOwogICAgIH0KIH0KIApAQCAtMTIxLDcgKzE0Miw3IEBACiAgICAgaWYgKGZwdXRzKHRtcFZhbCwgc3RkZXJyKSA9PSBFT0YpCiAgICAgewogICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCi0JCQkJWE1MNENFeGNlcHRzOjpTdHJtX1N0ZEVycldyaXRlRmFpbHVyZSk7CisgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpTdHJtX1N0ZEVycldyaXRlRmFpbHVyZSk7CiAgICB9CiB9CiAKQEAgLTEzMiw3ICsxNTMsNyBAQAogICAgIGlmIChmcHV0cyh0bXBWYWwsIHN0ZG91dCkgPT0gRU9GKQogICAgIHsKICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKLQkJCQkgWE1MNENFeGNlcHRzOjpTdHJtX1N0ZE91dFdyaXRlRmFpbHVyZSk7CisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6U3RybV9TdGRPdXRXcml0ZUZhaWx1cmUpOwogICAgIH0KIH0KIApAQCAtMTQxLDEyICsxNjIsMzcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFN0YW5kYXJkIG91dC9lcnJvciBzdXBwb3J0CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OndyaXRlVG9TdGRFcnIoY29uc3QgY2hhciogY29uc3QgdG9Xcml0ZSkKK3sKKyAgICBXcml0ZUNoYXJTdHIoc3RkZXJyLCB0b1dyaXRlKTsKK30KK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6d3JpdGVUb1N0ZEVycihjb25zdCBYTUxDaCogY29uc3QgdG9Xcml0ZSkKK3sKKyAgICBXcml0ZVVTdHJTdGRFcnIodG9Xcml0ZSk7Cit9Cit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OndyaXRlVG9TdGRPdXQoY29uc3QgWE1MQ2gqIGNvbnN0IHRvV3JpdGUpCit7CisgICAgV3JpdGVVU3RyU3RkT3V0KHRvV3JpdGUpOworfQordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkT3V0KGNvbnN0IGNoYXIqIGNvbnN0IHRvV3JpdGUpCit7CisgICAgV3JpdGVDaGFyU3RyKHN0ZG91dCwgdG9Xcml0ZSk7Cit9CisKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgWE1MUGxhdGZvcm1VdGlsczogUGxhdGZvcm0gaW5pdCBtZXRob2QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBzdGF0aWMgWE1MTXV0ZXggYXRvbWljT3BzTXV0ZXg7CiAKIAorCiB2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAgLy8KQEAgLTE1NCwxNyArMjAwLDE4IEBACiAgICAgLy8gTm9ybWFsbHksIG11dGV4ZXMgYXJlIGNyZWF0ZWQgb24gZmlyc3QgdXNlLCBidXQgdGhlcmUgaXMgYQogICAgIC8vIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBjb21wYXJlQW5kRXhjaGFuZ2UoKSBhbmQKICAgICAvLyBtdXRleCBjcmVhdGlvbiB0aGF0IG11c3QgYmUgYnJva2VuLgorCiAgICAgYXRvbWljT3BzTXV0ZXguZkhhbmRsZSA9IFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpOwogCiAgICAgLy8gSGVyZSB5b3Ugd291bGQgYWxzbyBzZXQgdGhlIGZnTGliTG9jYXRpb24gZ2xvYmFsIHZhcmlhYmxlCiAgICAgLy8gWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiBpcyB0aGUgdmFyaWFibGUgdG8gYmUgc2V0CiAKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqc2hhcmVkTGliRW52VmFyID0gIkxEX0xJQlJBUllfUEFUSCI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKiBsaWJyYXJ5UGF0aCA9IDA7Ci0KLSAgICBjaGFyIGxpYk5hbWVbMjU2XTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogIHNoYXJlZExpYkVudlZhciA9ICJMRF9MSUJSQVJZX1BBVEgiOworICAgIGNoYXIqICAgICAgICAgICAgICAgbGlicmFyeVBhdGggPSAwOworICAgIGNoYXIgICAgICAgICAgICAgICAgbGliTmFtZVsyNTZdOwogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBsaWJyYXJ5IG5hbWUgZnJvbSB0aGUgZ2xvYmFsIHZhcmlhYmxlcworCiAgICAgc3RyY3B5KGxpYk5hbWUsIFhNTDRDX0RMTE5hbWUpOwogICAgIHN0cmNhdChsaWJOYW1lLCBnWE1MNENWZXJzaW9uU3RyKTsKICAgICBzdHJjYXQobGliTmFtZSwgIi5zbyIpOwpAQCAtMTc0LDE4ICsyMjEsMjEgQEAKIAogICAgIGlmIChsaWJFbnZWYXIgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIHBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19Ob1RyYW5zU2VydmljZSApOworICAgICAgICBwYW5pYyhYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19DYW50RmluZExpYik7CiAgICAgfQogCiAgICAgLy8KICAgICAvLyBJdHMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIGNvcHkgYmVjYXVzZSBzdHJ0b2soKSBtb2RpZmllcyB0aGUKICAgICAvLyBzdHJpbmcgYXMgaXQgcmV0dXJucyB0b2tlbnMuIFdlIGRvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBzdHJpbmcKICAgICAvLyByZXR1cm5lZCB0byBieSBnZXRlbnYoKS4KKyAgICAvLwogCiAgICAgbGliUGF0aCA9IG5ldyBjaGFyW3N0cmxlbihsaWJFbnZWYXIpICsgMV07CiAgICAgc3RyY3B5KGxpYlBhdGgsIGxpYkVudlZhcik7CiAKKwogICAgIC8vIEZpcnN0IGRvIHRoZSBzZWFyY2hpbmcgcHJvY2VzcyBmb3IgdGhlIGZpcnN0IGRpcmVjdG9yeSBsaXN0aW5nCisKICAgICBjaGFyKiAgYWxsUGF0aHMgPSBsaWJQYXRoOwogICAgIGNoYXIqICBsaWJQYXRoTmFtZTsKIApAQCAtMjA5LDcgKzI1OSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgfQorICAgIH0gLy8gd2hpbGUKIAogICAgIGRlbGV0ZSBsaWJQYXRoOwogCkBAIC0yMTcsNyArMjY3LDcgQEAKIAogICAgIGlmIChYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uID09IE5VTEwpCiAgICAgewotICAgICAgICBwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UgKTsKKyAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudEZpbmRMaWIpOwogICAgIH0KIH0KIApAQCAtMjI5LDggKzI3OSw4IEBACiAvLwogLy8gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgcGFydCBvZiB0aGlzIGNsYXNzCiAvLyAgd2hlbiBjbGllbnQgY29kZSBhc2tzIHRvIGhhdmUgb25lIG9mIHRoZSBzdXBwb3J0ZWQgbWVzc2FnZSBzZXRzIGxvYWRlZC4KLS8vICBJbiBvdXIgY2FzZSwgd2UgdXNlIHRoZSBJQ1UgYmFzZWQgbWVzc2FnZSBsb2FkZXIgbWVjaGFuaXNtLgogLy8KKwogWE1MTXNnTG9hZGVyKiBYTUxQbGF0Zm9ybVV0aWxzOjpsb2FkQU1zZ1NldChjb25zdCBYTUxDaCogY29uc3QgbXNnRG9tYWluKQogewogICAgIFhNTE1zZ0xvYWRlciogcmV0VmFsOwpAQCAtMjM4LDQzICsyODgsNDIgQEAKICAgICB7CiAjaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfTUVTU0FHRUxPQURFUikKICAgICAgICAgcmV0VmFsID0gbmV3IElDVU1zZ0xvYWRlcihtc2dEb21haW4pOwotI2VsaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ09OVl9NRVNTQUdFTE9BREVSKQotICAgICAgICByZXRWYWwgPSBuZXcgTXNnQ2F0YWxvZ0xvYWRlcihtc2dEb21haW4pOwogI2Vsc2UKKyAgICAgICAgLy8gc2FtZSBhcyAtRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUgogICAgICAgICByZXRWYWwgPSBuZXcgSW5NZW1Nc2dMb2FkZXIobXNnRG9tYWluKTsKICNlbmRpZgogICAgIH0KIAogICAgIGNhdGNoKC4uLikKICAgICB7Ci0gICAgICAgIHBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19Ob0RlZlRyYW5zY29kZXIgKTsKKyAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudExvYWRNc2dEb21haW4pOwogICAgIH0KICAgICByZXR1cm4gcmV0VmFsOwogfQogCisKIC8vCiAvLyAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHZlcnkgZWFybHkgaW4gdGhlIGJvb3RzdHJhcHBpbmcgcHJvY2Vzcy4gVGhpcyBndXkKIC8vICBtdXN0IGNyZWF0ZSBhIHRyYW5zY29kaW5nIHNlcnZpY2UgYW5kIHJldHVybiBpdC4gSXQgY2Fubm90IHVzZSBhbnkgc3RyaW5nCiAvLyAgbWV0aG9kcywgYW55IHRyYW5zY29kaW5nIHNlcnZpY2VzLCB0aHJvdyBhbnkgZXhjZXB0aW9ucywgZXRjLi4uIEl0IGp1c3QKIC8vICBtYWtlcyBhIHRyYW5zY29kaW5nIHNlcnZpY2UgYW5kIHJldHVybnMgaXQsIG9yIHJldHVybnMgemVybyBvbiBmYWlsdXJlLgogLy8KLVhNTFRyYW5zU2VydmljZSogWE1MUGxhdGZvcm1VdGlsczo6bWFrZVRyYW5zU2VydmljZSgpCiAKLSNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9UUkFOU0NPREVSKQorWE1MVHJhbnNTZXJ2aWNlKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlVHJhbnNTZXJ2aWNlKCkKIHsKKyNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9UUkFOU0NPREVSKQogICAgIC8vCiAgICAgLy8gIFdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0byB0aGUgSW50bCBjb252ZXJ0ZXIgZmlsZXMuCiAgICAgLy8KIAotICAgIHN0YXRpYyBjb25zdCBjaGFyICogeG1sNGNJbnRsRGlyRW52VmFyID0gIklDVV9EQVRBIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqIHNoYXJlZExpYkVudlZhciAgICA9ICJMRF9MSUJSQVJZX1BBVEgiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyICogaW50bFBhdGggPSAwOworICAgIHN0YXRpYyBjb25zdCBjaGFyICogaWN1RGF0YUVudlZhciAgID0gIklDVV9EQVRBIjsKKyAgICBjaGFyICogICAgICAgICAgICAgIGludGxQYXRoICAgICAgICA9IDA7CiAKLSAgICBjaGFyKiBlbnZWYWwgPSBnZXRlbnYoeG1sNGNJbnRsRGlyRW52VmFyKTsKLSAgICAvL2NoZWNrIGlmIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldAotICAgIGlmIChlbnZWYWwgIT0gTlVMTCkgLy8gV2UgaGF2ZSBmb3VuZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgIGNoYXIqIGVudlZhbCA9IGdldGVudihpY3VEYXRhRW52VmFyKTsKKworICAgIC8vIENoZWNrIGlmIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldC4uLgorICAgIGlmIChlbnZWYWwgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIC8vIFN0b3JlIHRoaXMgc3RyaW5nIGluIHRoZSBzdGF0aWMgbWVtYmVyCiAgICAgICAgIHVuc2lnbmVkIGludCBwYXRoTGVuID0gc3RybGVuKGVudlZhbCk7CiAgICAgICAgIGludGxQYXRoID0gbmV3IGNoYXJbcGF0aExlbiArIDJdOwogCkBAIC0yODUsODYgKzMzNCwzOSBAQAogICAgICAgICB9CiAKICAgICAgICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKLSAgICAgICAgaWYgKGludGxQYXRoICE9IE5VTEwpIGRlbGV0ZSBpbnRsUGF0aDsKKyAgICAgICAgZGVsZXRlIGludGxQYXRoOwogCiAgICAgICAgIHJldHVybiBuZXcgSUNVVHJhbnNTZXJ2aWNlOwogICAgIH0KIAogICAgIC8vCi0gICAgLy8gIElmIHdlIGRpZCBub3QgZmluZCB0aGUgZW52aXJvbm1lbnQgdmFyLCBzbyBsZXRzIHRyeSB0byBnbyB0aGUgYXV0bwotICAgIC8vICBzZWFyY2ggcm91dGUuCi0gICAgLy8KLSAgICBjaGFyIGxpYk5hbWVbMjU2XTsKLSAgICBzdHJjcHkobGliTmFtZSwgWE1MNENfRExMTmFtZSk7Ci0gICAgc3RyY2F0KGxpYk5hbWUsIGdYTUw0Q1ZlcnNpb25TdHIpOwotICAgIHN0cmNhdChsaWJOYW1lLCAiLnNvIik7Ci0KLSAgICBjaGFyKiBsaWJFbnZWYXIgPSBnZXRlbnYoc2hhcmVkTGliRW52VmFyKTsKLSAgICBjaGFyKiBsaWJQYXRoID0gTlVMTDsKLQotICAgIGlmIChsaWJFbnZWYXIgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19Ob1RyYW5zU2VydmljZSApOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gSXRzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBjb3B5IGJlY2F1c2Ugc3RydG9rKCkgbW9kaWZpZXMgdGhlCi0gICAgLy8gc3RyaW5nIGFzIGl0IHJldHVybnMgdG9rZW5zLiBXZSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgc3RyaW5nCi0gICAgLy8gcmV0dXJuZWQgdG8gYnkgZ2V0ZW52KCkuCisgICAgLy8gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBJQ1VfREFUQSBpcyBub3Qgc2V0LCBhc3N1bWUgdGhhdCB0aGUKKyAgICAvLyAgY29udmVydGVyIGZpbGVzIGFyZSBzdG9yZWQgcmVsYXRpdmUgdG8gdGhlIFhlcmNlcy1DIGxpYnJhcnkuCiAgICAgLy8KIAotICAgIGxpYlBhdGggPSBuZXcgY2hhcltzdHJsZW4obGliRW52VmFyKSArIDFdOwotICAgIHN0cmNweShsaWJQYXRoLCBsaWJFbnZWYXIpOwotCi0gICAgLy8gRmlyc3QgZG8gdGhlIHNlYXJjaGluZyBwcm9jZXNzIGZvciB0aGUgZmlyc3QgZGlyZWN0b3J5IGxpc3RpbmcKLSAgICBjaGFyKiAgYWxsUGF0aHMgPSBsaWJQYXRoOwotICAgIGNoYXIqICBsaWJQYXRoTmFtZTsKLQotICAgIHdoaWxlICgobGliUGF0aE5hbWUgPSBzdHJ0b2soYWxsUGF0aHMsICI6IikpICE9IE5VTEwpCi0gICAgewotICAgICAgICBGSUxFKiAgZHVtbXlGcHRyID0gMDsKLSAgICAgICAgYWxsUGF0aHMgPSAwOwotCi0gICAgICAgIGNoYXIqIGxpYmZpbGUgPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpICsgc3RybGVuKGxpYk5hbWUpICsgMl07Ci0gICAgICAgIHN0cmNweShsaWJmaWxlLCBsaWJQYXRoTmFtZSk7Ci0gICAgICAgIHN0cmNhdChsaWJmaWxlLCAiLyIpOwotICAgICAgICBzdHJjYXQobGliZmlsZSwgbGliTmFtZSk7Ci0KLSAgICAgICAgZHVtbXlGcHRyID0gKEZJTEUgKikgZm9wZW4obGliZmlsZSwgInJiIik7Ci0gICAgICAgIGRlbGV0ZSBbXSBsaWJmaWxlOwotICAgICAgICBpZiAoZHVtbXlGcHRyICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZjbG9zZShkdW1teUZwdHIpOwotICAgICAgICAgICAgaW50bFBhdGggPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpKyBzdHJsZW4oIi9pY3UvZGF0YS8iKSsxXTsKLSAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBpbnRsUGF0aCwgbGliUGF0aE5hbWUpOwotICAgICAgICAgICAgc3RyY2F0KChjaGFyICopIGludGxQYXRoLCAiL2ljdS9kYXRhLyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIH0gLy8gd2hpbGUKLQotICAgIGRlbGV0ZSBsaWJQYXRoOworICAgIHVuc2lnbmVkIGludCAgbGVudCA9IHN0cmxlbihYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCIvaWN1L2RhdGEvIikgKyAxOworICAgIGludGxQYXRoID0gbmV3IGNoYXJbbGVudF07CisgICAgc3RyY3B5KGludGxQYXRoLCBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uKTsKKyAgICBzdHJjYXQoaW50bFBhdGgsICIvaWN1L2RhdGEvIik7CiAKICAgICBJQ1VUcmFuc1NlcnZpY2U6OnNldElDVVBhdGgoaW50bFBhdGgpOwotCi0gICAgaWYgKGludGxQYXRoID09IE5VTEwpCi0gICAgewotICAgICAgICBwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UgKTsKLSAgICB9Ci0gICAgaWYgKGludGxQYXRoICE9IE5VTEwpIGRlbGV0ZSBpbnRsUGF0aDsKKyAgICBkZWxldGUgaW50bFBhdGg7CiAKICAgICByZXR1cm4gbmV3IElDVVRyYW5zU2VydmljZTsKLX0KLSNlbGlmIGRlZmluZWQgKFhNTF9VU0VfSUNPTlZfVFJBTlNDT0RFUikKLXsKLSAgICByZXR1cm4gbmV3IEljb252VHJhbnNTZXJ2aWNlOwotfQorCisKICNlbHNlCi17CisKKyAgICAvLyBVc2UgbmF0aXZlIHRyYW5zY29kaW5nIHNlcnZpY2VzLgorICAgIC8vIHNhbWUgYXMgLURYTUxfVVNFX0lOTUVNX01FU1NBR0VMT0FERVIKICAgICByZXR1cm4gbmV3IEljb252VHJhbnNTZXJ2aWNlOwotfQorCiAjZW5kaWYKIAorfSAvLyBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlVHJhbnNTZXJ2aWNlCisKKwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBYTUxQbGF0Zm9ybVV0aWxzOiBUaGUgcGFuaWMgbWV0aG9kCkBAIC0zNzQsMjcgKzM3NiwzOCBAQAogICAgIC8vCiAgICAgLy8gIFdlIGp1c3QgcHJpbnQgYSBtZXNzYWdlIGFuZCBleGl0CiAgICAgLy8KLSAgICBwcmludGYoIlRoZSBYTUw0QyBzeXN0ZW0gY291bGQgbm90IGJlIGluaXRpYWxpemVkLlxuIik7Ci0gICAgcHJpbnRmKCJUaGUgbW9zdCBsaWtlbHkgcmVhc29uIGZvciB0aGlzIGZhaWx1cmUgaXMgdGhlIGluYWJpbGl0eSB0byBmaW5kXG4iKTsKLSAgICBwcmludGYoInRoZSBpbnRlcm5hdGlvbmFsIGVuY29kaW5nIGZpbGVzLiBCeSBkZWZhdWx0LCB0aGUgZW5jb2RpbmcgZmlsZXNcbiIpOwotICAgIHByaW50ZigiaGF2ZSB0aGUgZXh0ZW5zaW9uIC5jbnYgYW5kIGV4aXN0IGluIGEgZGlyZWN0b3J5IGljdS9kYXRhIHJlbGF0aXZlXG4iKTsKLSAgICBwcmludGYoInRvIHRoZSBYTUw0QyBzaGFyZWQgbGlicmFyeS4gSWYgeW91IGhhdmUga2VwdCB0aGUgY29udmVydGVyIGZpbGVzXG4iKTsKLSAgICBwcmludGYoImluIGEgZGlmZmVyZW50IGxvY2F0aW9uLCB5b3UgbmVlZCB0byBzZXQgdXAgYW4gZW52aXJvbm1lbnQgdmFyaWFibGVcbiIpOwotICAgIHByaW50ZigiY2FsbGVkIElDVV9EQVRBIHdoaWNoIGRpcmVjdGx5IHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZVxuIik7Ci0gICAgcHJpbnRmKCJlbmNvZGluZyBmaWxlcyBhcmUga2VwdC5cbiIpOwotCisgICAgCisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJUaGUgWGVyY2VzLUMgc3lzdGVtIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC5cbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiSWYgeW91IGFyZSB1c2luZyBJQ1UsIHRoZW4gdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBmb3IgdGhpcyBmYWlsdXJlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImlzIHRoZSBpbmFiaWxpdHkgdG8gZmluZCB0aGUgSUNVIGNvdmVydGVyIGZpbGVzLiBUaGUgY29udmVydGVyIGZpbGVzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImhhdmUgdGhlIGV4dGVuc2lvbiAuY252IGFuZCBleGlzdCBpbiBhIGRpcmVjdG9yeSAnaWN1L2RhdGEnIHJlbGF0aXZlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgInRvIHRoZSBYZXJjZXMtQyBzaGFyZWQgbGlicmFyeS4gSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb252ZXJ0ZXIgZmlsZXNcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24sIHlvdSBuZWVkIHRvIHNldCB1cCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiJ0lDVV9EQVRBJyB0byBwb2ludCBkaXJlY3RseSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImNvbnZlcnRlciBmaWxlcy5cbiIpOworICAgIAogICAgIGV4aXQoLTEpOwogfQogCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFhNTFBsYXRmb3JtVXRpbHM6IEZpbGUgTWV0aG9kcwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIHVuc2lnbmVkIGludCBYTUxQbGF0Zm9ybVV0aWxzOjpjdXJGaWxlUG9zKEZpbGVIYW5kbGUgdGhlRmlsZSkKIHsKLSAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24KICAgICBpbnQgY3VyUG9zID0gZnRlbGwoIChGSUxFKil0aGVGaWxlKTsKICAgICBpZiAoY3VyUG9zID09IC0xKQotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RHZXRTaXplKTsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0U2l6ZSk7CiAKICAgICByZXR1cm4gKHVuc2lnbmVkIGludCljdXJQb3M7CiB9CkBAIC00MDIsMjcgKzQxNSwzMyBAQAogdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpjbG9zZUZpbGUoRmlsZUhhbmRsZSB0aGVGaWxlKQogewogICAgIGlmIChmY2xvc2UoKEZJTEUqKXRoZUZpbGUpKQotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RDbG9zZUZpbGUpOworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RDbG9zZUZpbGUpOwogfQogCiB1bnNpZ25lZCBpbnQgWE1MUGxhdGZvcm1VdGlsczo6ZmlsZVNpemUoRmlsZUhhbmRsZSB0aGVGaWxlKQogewogICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbgotICAgIGxvbmcgIGludCBjdXJQb3MgPSBmdGVsbCgoRklMRSopdGhlRmlsZSk7CisgICAgbG9uZyAgaW50IGN1clBvcyA9IGZ0ZWxsKChGSUxFKikgdGhlRmlsZSk7CiAgICAgaWYgKGN1clBvcyA9PSAtMSkKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0Q3VyUG9zKTsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0Q3VyUG9zKTsKIAogICAgIC8vIFNlZWsgdG8gdGhlIGVuZCBhbmQgc2F2ZSB0aGF0IHZhbHVlIGZvciByZXR1cm4KLSAgICAgaWYgKGZzZWVrKCAoRklMRSopdGhlRmlsZSwgMCwgU0VFS19FTkQpICkKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90U2Vla1RvRW5kKTsKKyAgICAgaWYgKGZzZWVrKChGSUxFKikgdGhlRmlsZSwgMCwgU0VFS19FTkQpKQorICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RTZWVrVG9FbmQpOwogCi0gICAgbG9uZyBpbnQgcmV0VmFsID0gZnRlbGwoIChGSUxFKil0aGVGaWxlKTsKKyAgICBsb25nIGludCByZXRWYWwgPSBmdGVsbCgoRklMRSopdGhlRmlsZSk7CiAgICAgaWYgKHJldFZhbCA9PSAtMSkKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90U2Vla1RvRW5kKTsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90U2Vla1RvRW5kKTsKIAogICAgIC8vIEFuZCBwdXQgdGhlIHBvaW50ZXIgYmFjaworCiAgICAgaWYgKGZzZWVrKCAoRklMRSopdGhlRmlsZSwgY3VyUG9zLCBTRUVLX1NFVCkgKQotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RTZWVrVG9Qb3MpOworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RTZWVrVG9Qb3MpOwogCiAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpcmV0VmFsOwogfQpAQCAtNDM4LDE2ICs0NTcsMjYgQEAKICAgICByZXR1cm4gcmV0VmFsOwogfQogCi11bnNpZ25lZCBpbnQKLVhNTFBsYXRmb3JtVXRpbHM6OnJlYWRGaWxlQnVmZmVyKCAgRmlsZUhhbmRsZSAgICAgIHRoZUZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCB1bnNpZ25lZCBpbnQgICAgdG9SZWFkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgWE1MQnl0ZSogY29uc3QgIHRvRmlsbCkKKworCitGaWxlSGFuZGxlIFhNTFBsYXRmb3JtVXRpbHM6Om9wZW5TdGRJbkhhbmRsZSgpCiB7Ci0gICAgc2l6ZV90IG5vT2ZJdGVtc1JlYWQgPSBmcmVhZCggKHZvaWQqKSB0b0ZpbGwsIDEsIHRvUmVhZCwgKEZJTEUqKXRoZUZpbGUpOworICAgICAgICByZXR1cm4gKEZpbGVIYW5kbGUpZmRvcGVuKGR1cCgwKSwgInJiIik7Cit9CisKKworCit1bnNpZ25lZCBpbnQKK1hNTFBsYXRmb3JtVXRpbHM6OnJlYWRGaWxlQnVmZmVyKCBGaWxlSGFuZGxlICAgICAgICAgIHRoZUZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCB1bnNpZ25lZCBpbnQgIHRvUmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFhNTEJ5dGUqIGNvbnN0ICAgICAgdG9GaWxsKQoreworICAgIHNpemVfdCBub09mSXRlbXNSZWFkID0gZnJlYWQoKHZvaWQqKSB0b0ZpbGwsIDEsIHRvUmVhZCwgKEZJTEUqKXRoZUZpbGUpOwogCiAgICAgaWYoZmVycm9yKChGSUxFKil0aGVGaWxlKSkKICAgICB7Ci0gICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFJlYWRGcm9tRmlsZSk7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFJlYWRGcm9tRmlsZSk7CiAgICAgfQogCiAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpbm9PZkl0ZW1zUmVhZDsKQEAgLTQ1NywxMCArNDg2LDEyIEBACiB2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnJlc2V0RmlsZShGaWxlSGFuZGxlIHRoZUZpbGUpCiB7CiAgICAgLy8gU2VlayB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKLSAgICBpZiAoZnNlZWsoKEZJTEUqKXRoZUZpbGUsIDAsIFNFRUtfU0VUKSApCi0gICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFJlc2V0RmlsZSk7CisgICAgaWYgKGZzZWVrKChGSUxFKil0aGVGaWxlLCAwLCBTRUVLX1NFVCkpCisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFJlc2V0RmlsZSk7CiB9CiAKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgWE1MUGxhdGZvcm1VdGlsczogVGltaW5nIE1ldGhvZHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDg1LDIwICs1MTYsMjQgQEAKICAgICBBcnJheUphbml0b3I8Y2hhcj4gamFuVGV4dChuZXdTcmMpOwogCiAgICAgLy8gVXNlIGEgbG9jYWwgYnVmZmVyIHRoYXQgaXMgYmlnIGVub3VnaCBmb3IgdGhlIGxhcmdlc3QgbGVnYWwgcGF0aAotICAgICBjaGFyKiB0bXBQYXRoID0gZGlybmFtZSgoY2hhciopbmV3U3JjKTsKKyAgICAvLyBOb3RlICMxMTg2OiBkaXJOYW1lKCkgaXMgbm90IHRocmVhZCBzYWZlLgorICAgIGNoYXIqIHRtcFBhdGggPSBkaXJuYW1lKG5ld1NyYyk7CiAgICAgaWYgKCF0bXBQYXRoKQogICAgIHsKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0QmFzZVBhdGhOYW1lKTsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0QmFzZVBhdGhOYW1lKTsKICAgICB9CiAKICAgICBjaGFyKiBuZXdYTUxTdHJpbmcgPSBuZXcgY2hhciBbc3RybGVuKHRtcFBhdGgpICsyXTsKICAgICBBcnJheUphbml0b3I8Y2hhcj4gbmV3SmFuaXRvcihuZXdYTUxTdHJpbmcpOwogICAgIHN0cmNweShuZXdYTUxTdHJpbmcsIHRtcFBhdGgpOwotICAgICAgICBzdHJjYXQobmV3WE1MU3RyaW5nICwgIi8iKTsKKyAgICBzdHJjYXQobmV3WE1MU3RyaW5nICwgIi8iKTsKKwogICAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIHBhdGgsIGluIFVuaWNvZGUgZm9ybWF0CiAgICAgcmV0dXJuIFhNTFN0cmluZzo6dHJhbnNjb2RlKG5ld1hNTFN0cmluZyk7CiB9CiAKKwogYm9vbCBYTUxQbGF0Zm9ybVV0aWxzOjppc1JlbGF0aXZlKGNvbnN0IFhNTENoKiBjb25zdCB0b0NoZWNrKQogewogICAgIC8vIENoZWNrIGZvciBwYXRob2xvZ2ljYWwgY2FzZSBvZiBlbXB0eSBwYXRoCkBAIC01MTcsMTI1ICs1NTIsOTAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBTdGFuZGFyZCBvdXQvZXJyb3Igc3VwcG9ydAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkRXJyKGNvbnN0IGNoYXIqIGNvbnN0IHRvV3JpdGUpCi17Ci0gICAgV3JpdGVDaGFyU3RyKHN0ZGVyciwgdG9Xcml0ZSk7Ci19Ci12b2lkIFhNTFBsYXRmb3JtVXRpbHM6OndyaXRlVG9TdGRFcnIoY29uc3QgWE1MQ2gqIGNvbnN0IHRvV3JpdGUpCi17Ci0gICAgV3JpdGVVU3RyU3RkRXJyKHRvV3JpdGUpOwotfQotdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkT3V0KGNvbnN0IFhNTENoKiBjb25zdCB0b1dyaXRlKQotewotICAgIFdyaXRlVVN0clN0ZE91dCh0b1dyaXRlKTsKLX0KLXZvaWQgWE1MUGxhdGZvcm1VdGlsczo6d3JpdGVUb1N0ZE91dChjb25zdCBjaGFyKiBjb25zdCB0b1dyaXRlKQotewotICAgIFdyaXRlQ2hhclN0cihzdGRvdXQsIHRvV3JpdGUpOwotfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIE11dGV4IG1ldGhvZHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZm5kZWYgQVBQX05PX1RIUkVBRFMKLXZvaWQgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCi17Ci0gICAgaWYgKG10eEhhbmRsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSggKHB0aHJlYWRfbXV0ZXhfdCopbXR4SGFuZGxlKSkKLSAgICB7Ci0gICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3REZXN0cm95KTsKLSAgICB9Ci0gICAgaWYgKChwdGhyZWFkX211dGV4X3QqKW10eEhhbmRsZSkKLSAgICAgICAgZGVsZXRlIG10eEhhbmRsZTsKLX0KLQotdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpsb2NrTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQotewotICAgIGlmIChtdHhIYW5kbGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChwdGhyZWFkX211dGV4X2xvY2soIChwdGhyZWFkX211dGV4X3QqKW10eEhhbmRsZSkpCi0gICAgewotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90TG9jayk7Ci0gICAgfQotfQorI2lmICFkZWZpbmVkKEFQUF9OT19USFJFQURTKQogCiB2b2lkKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKQogewogICAgIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXggPSBuZXcgcHRocmVhZF9tdXRleF90OwotCi0gICAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdChtdXRleCwgTlVMTCkpCisgICAgcHRocmVhZF9tdXRleGF0dHJfdCogIGF0dHIgPSBuZXcgcHRocmVhZF9tdXRleGF0dHJfdDsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KGF0dHIpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAoYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlApOworICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQobXV0ZXgsIGF0dHIpKQogICAgIHsKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdENyZWF0ZSk7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RDcmVhdGUpOwogICAgIH0KKyAgICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KGF0dHIpOworICAgIGRlbGV0ZSBhdHRyOwogICAgIHJldHVybiAodm9pZCopKG11dGV4KTsKKwogfQogCi12b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnVubG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKLXsKLSAgICBpZiAobXR4SGFuZGxlID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAocHRocmVhZF9tdXRleF91bmxvY2soIChwdGhyZWFkX211dGV4X3QqKW10eEhhbmRsZSkpCi0gICAgewotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90VW5sb2NrKTsKLSAgICB9Ci19Ci0KLSNlbHNlIC8vICNpZm5kZWYgQVBQX05PX1RIUkVBRFMKIAogdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpjbG9zZU11dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKIHsKKyAgICBpZiAobXR4SGFuZGxlICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAocHRocmVhZF9tdXRleF9kZXN0cm95KChwdGhyZWFkX211dGV4X3QqKSBtdHhIYW5kbGUpKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdERlc3Ryb3kpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBtdHhIYW5kbGU7CisgICAgfQogfQogCisKIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6bG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKIHsKKyAgICBpZiAobXR4SGFuZGxlICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrKChwdGhyZWFkX211dGV4X3QqKSBtdHhIYW5kbGUpKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdExvY2spOworICAgICAgICB9CisgICAgfQogfQogCi12b2lkKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKQotewotICAgICAgICByZXR1cm4gMDsKLX0KIAogdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp1bmxvY2tNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCiB7CisgICAgaWYgKG10eEhhbmRsZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211dGV4X3QqKSBtdHhIYW5kbGUpKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdFVubG9jayk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKLSNlbmRpZiAvLyBBUFBfTk9fVEhSRUFEUwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIE1pc2NlbGxhbmVvdXMgc3luY2hyb25pemF0aW9uIG1ldGhvZHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vL2F0b21pYyBzeXN0ZW0gY2FsbHMgaW4gU29sYXJpcyBpcyBvbmx5IHJlc3RyaWN0ZWQgdG8ga2VybmVsIGxpYnJhcmllcwotLy9TbywgdG8gbWFrZSBvcGVyYXRpb25zIHRocmVhZCBzYWZlIHdlIGltcGxlbWVudCBzdGF0aWMgbXV0ZXggYW5kIGxvY2sKLS8vdGhlIGF0b21pYyBvcGVyYXRpb25zLiBJdCBtYWtlcyB0aGUgcHJvY2VzcyBzbG93IGJ1dCB3aGF0J3MgdGhlIGFsdGVybmF0aXZlIQogCi12b2lkKiBYTUxQbGF0Zm9ybVV0aWxzOjpjb21wYXJlQW5kU3dhcCAoIHZvaWQqKiAgICAgIHRvRmlsbCAsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGNvbnN0IG5ld1ZhbHVlICwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogY29uc3QgdG9Db21wYXJlKQordm9pZCogWE1MUGxhdGZvcm1VdGlsczo6Y29tcGFyZUFuZFN3YXAodm9pZCoqICAgICAgICAgICAgdG9GaWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCB2b2lkKiBjb25zdCBuZXdWYWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3Qgdm9pZCogY29uc3QgdG9Db21wYXJlKQogewotICAgIC8vcmV0dXJuICgodm9pZCopY2FzMzIoICh1aW50MzJfdCopdG9GaWxsLCAgKHVpbnQzMl90KXRvQ29tcGFyZSwgKHVpbnQzMl90KW5ld1ZhbHVlKSApOwotICAgIC8vIHRoZSBiZWxvdyBjYWxscyBhcmUgdGVtcG9yYXJpbHkgbWFkZSB0aWxsIHRoZSBhYm92ZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdXNlciBsaWJyYXJ5Ci0gICAgLy8gQ3VycmVudGx5IGl0cyBzdXBwb3J0ZWQgb25seSBpbiB0aGUga2VybmVsIG1vZGUKLQotICAgIGxvY2tNdXRleCgmYXRvbWljT3BzTXV0ZXgpOworICAgIFhNTE11dGV4TG9jayBsb2NrTXV0ZXgoJmF0b21pY09wc011dGV4KTsKIAogICAgIHZvaWQgKnJldFZhbCA9ICp0b0ZpbGw7CiAgICAgaWYgKCp0b0ZpbGwgPT0gdG9Db21wYXJlKQotICAgICAgICAgICAgICAqdG9GaWxsID0gKHZvaWQgKiluZXdWYWx1ZTsKLQotICAgIHVubG9ja011dGV4KCZhdG9taWNPcHNNdXRleCk7CisgICAgICAgICp0b0ZpbGwgPSAodm9pZCAqKW5ld1ZhbHVlOwogCiAgICAgcmV0dXJuIHJldFZhbDsKIH0KIAogaW50IFhNTFBsYXRmb3JtVXRpbHM6OmF0b21pY0luY3JlbWVudChpbnQgJmxvY2F0aW9uKQogewotICAgIC8vcmV0dXJuIChpbnQpYXRvbWljX2FkZF8zMl9udiggKHVpbnQzMl90KikmbG9jYXRpb24sIDEpOwogICAgIFhNTE11dGV4TG9jayBsb2NhbExvY2soJmF0b21pY09wc011dGV4KTsKIAogICAgIHJldHVybiArK2xvY2F0aW9uOwpAQCAtNjQzLDE0ICs2NDMsNDkgQEAKIAogaW50IFhNTFBsYXRmb3JtVXRpbHM6OmF0b21pY0RlY3JlbWVudChpbnQgJmxvY2F0aW9uKQogewotICAgIC8vcmV0dXJuIChpbnQpYXRvbWljX2FkZF8zMl9udiggKHVpbnQzMl90KikmbG9jYXRpb24sIC0xKTsKICAgICBYTUxNdXRleExvY2sgbG9jYWxMb2NrKCZhdG9taWNPcHNNdXRleCk7CiAKICAgICByZXR1cm4gLS1sb2NhdGlvbjsKIH0KIAotRmlsZUhhbmRsZSBYTUxQbGF0Zm9ybVV0aWxzOjpvcGVuU3RkSW5IYW5kbGUoKQorI2Vsc2UgLy8gI2lmICFkZWZpbmVkIChBUFBfTk9fVEhSRUFEUykKKwordm9pZCogWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCkKIHsKLSAgICAgICAgcmV0dXJuIChGaWxlSGFuZGxlKWZkb3BlbihkdXAoMCksICJyYiIpOworICAgICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpjbG9zZU11dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKK30KKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpsb2NrTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQoreworfQorCit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnVubG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKK30KKwordm9pZCogWE1MUGxhdGZvcm1VdGlsczo6Y29tcGFyZUFuZFN3YXAgKHZvaWQqKiAgICAgICAgICAgICB0b0ZpbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogY29uc3QgIG5ld1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGNvbnN0ICB0b0NvbXBhcmUpCit7CisgICAgdm9pZCAqcmV0VmFsID0gKnRvRmlsbDsKKyAgICBpZiAoKnRvRmlsbCA9PSB0b0NvbXBhcmUpCisgICAgICAgKnRvRmlsbCA9ICh2b2lkICopbmV3VmFsdWU7CisgICAgcmV0dXJuIHJldFZhbDsKK30KKworaW50IFhNTFBsYXRmb3JtVXRpbHM6OmF0b21pY0luY3JlbWVudChpbnQgJmxvY2F0aW9uKQoreworICAgIHJldHVybiArK2xvY2F0aW9uOworfQorCitpbnQgWE1MUGxhdGZvcm1VdGlsczo6YXRvbWljRGVjcmVtZW50KGludCAmbG9jYXRpb24pCit7CisgICAgcmV0dXJuIC0tbG9jYXRpb247Cit9CisKKyNlbmRpZiAvLyBBUFBfTk9fVEhSRUFEUworCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9QbGF0Zm9ybXMvTWFrZWZpbGUuaW4gYi9zcmMvdXRpbC9QbGF0Zm9ybXMvTWFrZWZpbGUuaW4KaW5kZXggZDQyNGFkOS4uNDU2OTA5MCAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvUGxhdGZvcm1zL01ha2VmaWxlLmluCisrKyBiL3NyYy91dGlsL1BsYXRmb3Jtcy9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMjcgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNjoxNCAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS41ICAxOTk5LzEyLzE0IDIzOjUzOjMwICByYWh1bGoKKyMgUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisjIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTIvMDEgMTc6MTY6MTcgIHJhaHVsagorIyBBZGRlZCBzdXBwb3J0IGZvciBJUklYIDYuNS41IHVzaW5nIFNHSSBNSVBTcHJvIEMrKyA3LjMgYW5kIDcuMjEgZ2VuZXJhdGluZyAzMiBiaXQgb2JqZWN0cy4gQ2hhbmdlcyBzdWJtaXR0ZWQgYnkgTWFyYyBTdHVlc3NlbAorIworIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMjMgMDI6MDA6MjggIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCisjIFJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTcgMjI6MzY6MzcgIHJhaHVsagorIyBDb2RlIHdvcmtzIHdpdGggSUNVIHRyYW5zY29kaW5nIHNlcnZpY2UKKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNjoxNCAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MjggIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY0LDcgKzgzLDggQEAKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApAQCAtOTEsNiArMTExLDcgQEAKIGVuZGlmCiBpZmVxICgke1BMQVRGT1JNfSwgTElOVVgpCiAgICAgU1VCTU9EVUxFID0gUGxhdGZvcm1zL0xpbnV4CisgICAgQ1hYRkxBR1MgKz0gLURfX1VTRV9VTklYOTggLURfX1VTRV9HTlUKICAgICBDUFBfUFVCSEVBREVSUyA9IExpbnV4L0xpbnV4RGVmcy5ocHAKICAgICBDUFBfT0JKRUNUUyA9IExpbnV4L0xpbnV4UGxhdGZvcm1VdGlscy5vCiBlbmRpZgpAQCAtMTA0LDYgKzEyNSwxMSBAQAogICAgIENQUF9QVUJIRUFERVJTID0gT1MzOTAvT1MzOTBEZWZzLmhwcAogICAgIENQUF9PQkpFQ1RTID0gT1MzOTAvT1MzOTBQbGF0Zm9ybVV0aWxzLm8KIGVuZGlmCitpZmVxICgke1BMQVRGT1JNfSwgSVJJWCkKKyAgICBTVUJNT0RVTEUgPSBQbGF0Zm9ybXMvSVJJWAorICAgIENQUF9QVUJIRUFERVJTID0gSVJJWC9JUklYRGVmcy5ocHAKKyAgICBDUFBfT0JKRUNUUyA9IElSSVgvSVJJWFBsYXRmb3JtVXRpbHMubworZW5kaWYKIAogaW5jbHVkZSAuLi9NYWtlZmlsZS51dGlsLnN1Ym1vZHVsZQogCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcy9Tb2xhcmlzUGxhdGZvcm1VdGlscy5jcHAgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcy9Tb2xhcmlzUGxhdGZvcm1VdGlscy5jcHAKaW5kZXggODUxZTg1ZC4uNTE0ZTBlYyAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvUGxhdGZvcm1zL1NvbGFyaXMvU29sYXJpc1BsYXRmb3JtVXRpbHMuY3BwCisrKyBiL3NyYy91dGlsL1BsYXRmb3Jtcy9Tb2xhcmlzL1NvbGFyaXNQbGF0Zm9ybVV0aWxzLmNwcApAQCAtNTYsOCArNTYsMjEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA2OjMxICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMi8wOCAyMzoxMDowNyAgYXJ1bmExCisgKiBSZWN1cnNpdmUgbG9ja2luZyBtZWNoYW5pc20gYWRkZWQKKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMDIgMjM6MDc6MTMgIGFydW5hMQorICogU29sYXJpcyBBdG9taWMgTXV0ZXggaW5pdGFpbGl6YXRpb24gY2hhbmdlZCB0byBuYXRpdmUgY2FsbHMKKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTkgMjM6NTA6NTYgIGFydW5hMQorICogYWRkZWQgY2hhbmdlcyBmb3IgcGxhdGZvcm1Jbml0IGFuZCBtYWtlVHJhbnNTZXJ2aWNlIGZ1bmN0aW9ucworICogUFI6CisgKiBPYnRhaW5lZCBmcm9tOgorICogU3VibWl0dGVkIGJ5OgorICogUmV2aWV3ZWQgYnk6CisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNjozMSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDU6MzIgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC03MCw3ICs4Myw3IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmICFkZWZpbmVkIChBUFBfTk9fVEhSRUFEUykKLSNpbmNsdWRlICAgIDx0aHJlYWQuaD4KKyNpbmNsdWRlICAgIDxwdGhyZWFkLmg+CiAjZW5kaWYgLy8gQVBQX05PX1RIUkVBRFMKIAogCkBAIC0xNDcsNyArMTYwLDggQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFhNTFBsYXRmb3JtVXRpbHM6IFBsYXRmb3JtIGluaXQgbWV0aG9kCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyBYTUxNdXRleCBhdG9taWNPcHNNdXRleDsKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCogZ0F0b21pY09wTXV0ZXggPTAgOwogCiB2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnBsYXRmb3JtSW5pdCgpCiB7CkBAIC0xNTYsNyArMTcwLDc4IEBACiAgICAgLy8gTm9ybWFsbHksIG11dGV4ZXMgYXJlIGNyZWF0ZWQgb24gZmlyc3QgdXNlLCBidXQgdGhlcmUgaXMgYQogICAgIC8vIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBjb21wYXJlQW5kRXhjaGFuZ2UoKSBhbmQKICAgICAvLyBtdXRleCBjcmVhdGlvbiB0aGF0IG11c3QgYmUgYnJva2VuLgotICAgIGF0b21pY09wc011dGV4LmZIYW5kbGUgPSBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKTsKKyAgICBnQXRvbWljT3BNdXRleCA9IG5ldyBwdGhyZWFkX211dGV4X3Q7CQorICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQoZ0F0b21pY09wTXV0ZXgsIE5VTEwpKQorICAgIHsKKwlwcmludGYoImF0b21pY09wTXV0ZXggbm90IGNyZWF0ZWQgXG4iKTsKKwlleGl0KDEpOworICAgICAgICAvL3BhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19NdXRleEluaXQgKTsgLy90byBiZSBjaGFuZ2VkIGxhdGVyCisgICAgfQorCisgICAgLy8gSGVyZSB5b3Ugd291bGQgYWxzbyBzZXQgdGhlIGZnTGliTG9jYXRpb24gZ2xvYmFsIHZhcmlhYmxlCisgICAgLy8gWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiBpcyB0aGUgdmFyaWFibGUgdG8gYmUgc2V0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqc2hhcmVkTGliRW52VmFyID0gIkxEX0xJQlJBUllfUEFUSCI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBsaWJyYXJ5UGF0aCA9IDA7CisKKyAgICBjaGFyIGxpYk5hbWVbMjU2XTsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbGlicmFyeSBuYW1lIGZyb20gdGhlIGdsb2JhbCB2YXJpYWJsZXMKKyAgICBzdHJjcHkobGliTmFtZSwgWE1MNENfRExMTmFtZSk7CisgICAgc3RyY2F0KGxpYk5hbWUsIGdYTUw0Q1ZlcnNpb25TdHIpOworICAgIHN0cmNhdChsaWJOYW1lLCAiLnNvIik7CisKKyAgICBjaGFyKiBsaWJFbnZWYXIgPSBnZXRlbnYoc2hhcmVkTGliRW52VmFyKTsKKyAgICBjaGFyKiBsaWJQYXRoID0gTlVMTDsKKworICAgIGlmIChsaWJFbnZWYXIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19Ob1RyYW5zU2VydmljZSApOworICAgIH0KKworICAgIC8vCisgICAgLy8gSXRzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBjb3B5IGJlY2F1c2Ugc3RydG9rKCkgbW9kaWZpZXMgdGhlCisgICAgLy8gc3RyaW5nIGFzIGl0IHJldHVybnMgdG9rZW5zLiBXZSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgc3RyaW5nCisgICAgLy8gcmV0dXJuZWQgdG8gYnkgZ2V0ZW52KCkuCisKKyAgICBsaWJQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYkVudlZhcikgKyAxXTsKKyAgICBzdHJjcHkobGliUGF0aCwgbGliRW52VmFyKTsKKworICAgIC8vIEZpcnN0IGRvIHRoZSBzZWFyY2hpbmcgcHJvY2VzcyBmb3IgdGhlIGZpcnN0IGRpcmVjdG9yeSBsaXN0aW5nCisgICAgY2hhciogIGFsbFBhdGhzID0gbGliUGF0aDsKKyAgICBjaGFyKiAgbGliUGF0aE5hbWU7CisKKyAgICB3aGlsZSAoKGxpYlBhdGhOYW1lID0gc3RydG9rKGFsbFBhdGhzLCAiOiIpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRklMRSogIGR1bW15RnB0ciA9IDA7CisgICAgICAgIGFsbFBhdGhzID0gMDsKKworICAgICAgICBjaGFyKiBsaWJmaWxlID0gbmV3IGNoYXJbc3RybGVuKGxpYlBhdGhOYW1lKSArIHN0cmxlbihsaWJOYW1lKSArIDJdOworICAgICAgICBzdHJjcHkobGliZmlsZSwgbGliUGF0aE5hbWUpOworICAgICAgICBzdHJjYXQobGliZmlsZSwgIi8iKTsKKyAgICAgICAgc3RyY2F0KGxpYmZpbGUsIGxpYk5hbWUpOworCisgICAgICAgIGR1bW15RnB0ciA9IChGSUxFICopIGZvcGVuKGxpYmZpbGUsICJyYiIpOworICAgICAgICBkZWxldGUgW10gbGliZmlsZTsKKyAgICAgICAgaWYgKGR1bW15RnB0ciAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBmY2xvc2UoZHVtbXlGcHRyKTsKKyAgICAgICAgICAgIGxpYnJhcnlQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYlBhdGhOYW1lKSsxXTsKKyAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBsaWJyYXJ5UGF0aCwgbGliUGF0aE5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0KKworICAgIGRlbGV0ZSBsaWJQYXRoOworCisgICAgWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiA9IGxpYnJhcnlQYXRoOworCisgICAgaWYgKFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24gPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19Ob1RyYW5zU2VydmljZSApOworICAgICB9CisKIH0KIAogCkBAIC0xOTcsMjMgKzI4MiwyMiBAQAogLy8KIAogWE1MVHJhbnNTZXJ2aWNlKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlVHJhbnNTZXJ2aWNlKCkKLXsKIAogI2lmIGRlZmluZWQgKFhNTF9VU0VfSUNVX1RSQU5TQ09ERVIpCit7CiAgICAgLy8KLSAgICAvLyAgV2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRvIHRoZSBJbnRsIGNsYXNzZXMuIFRoZXkgd2lsbCBiZQotICAgIC8vICBpbiB0aGUgLi9JbnRsIHN1YmRpcmVjdG9yeSB1bmRlciB0aGlzIERMTC4KKyAgICAvLyAgV2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRvIHRoZSBJbnRsIGNvbnZlcnRlciBmaWxlcy4KICAgICAvLwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKiB4bWw0Y0ludGxEaXJFbnZWYXIgPSAiSUNVX0RBVEEiOwotICAgIGNoYXIgKiBpbnRsUGF0aCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBzaGFyZWRMaWJFbnZWYXIgICAgPSAiTERfTElCUkFSWV9QQVRIIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGludGxQYXRoID0gMDsKIAogICAgIGNoYXIqIGVudlZhbCA9IGdldGVudih4bWw0Y0ludGxEaXJFbnZWYXIpOwotICAgIC8vCi0gICAgLy8gQ2hlY2sgaWYgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0Ci0gICAgLy8KLSAgICBpZiAoZW52VmFsICE9IE5VTEwpICAgICAgICAgLy8gV2UgaGF2ZSBmb3VuZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgIC8vY2hlY2sgaWYgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0CisgICAgaWYgKGVudlZhbCAhPSBOVUxMKSAvLyBXZSBoYXZlIGZvdW5kIGFuIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAgeworICAgICAgICAvLyBTdG9yZSB0aGlzIHN0cmluZyBpbiB0aGUgc3RhdGljIG1lbWJlcgogICAgICAgICB1bnNpZ25lZCBpbnQgcGF0aExlbiA9IHN0cmxlbihlbnZWYWwpOwogICAgICAgICBpbnRsUGF0aCA9IG5ldyBjaGFyW3BhdGhMZW4gKyAyXTsKIApAQCAtMjI0LDgxICszMDgsODYgQEAKICAgICAgICAgfQogCiAgICAgICAgIElDVVRyYW5zU2VydmljZTo6c2V0SUNVUGF0aChpbnRsUGF0aCk7Ci0gICAgICAgIGlmIChpbnRsUGF0aCAhPSBOVUxMKSBkZWxldGUgaW50bFBhdGg7CisgICAgICAgIGlmIChpbnRsUGF0aCAhPSBOVUxMKSBkZWxldGUgKGNoYXIqKWludGxQYXRoOwogCiAgICAgICAgIHJldHVybiBuZXcgSUNVVHJhbnNTZXJ2aWNlOwogICAgIH0KIAotICAgIC8vCisKICAgICAvLyAgSWYgd2UgZGlkIG5vdCBmaW5kIHRoZSBlbnZpcm9ubWVudCB2YXIsIHNvIGxldHMgdHJ5IHRvIGdvIHRoZSBhdXRvCiAgICAgLy8gIHNlYXJjaCByb3V0ZS4KICAgICAvLwotCiAgICAgY2hhciBsaWJOYW1lWzI1Nl07CiAgICAgc3RyY3B5KGxpYk5hbWUsIFhNTDRDX0RMTE5hbWUpOwogICAgIHN0cmNhdChsaWJOYW1lLCBnWE1MNENWZXJzaW9uU3RyKTsKICAgICBzdHJjYXQobGliTmFtZSwgIi5zbyIpOwogCi0gICAgdm9pZCogaGFuZGxlID0gTlVMTDsKLSAgICBoYW5kbGUgPSBkbG9wZW4obGliTmFtZSwgUlRMRF9MQVpZKTsKLSAgICBpZiAoIWhhbmRsZSkKKyAgICBjaGFyKiBsaWJFbnZWYXIgPSBnZXRlbnYoc2hhcmVkTGliRW52VmFyKTsKKyAgICBjaGFyKiBsaWJQYXRoID0gTlVMTDsKKworICAgIGlmIChsaWJFbnZWYXIgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGNoYXIgZXJyb3JCdWZmZXJbMTAyNF07Ci0gICAgICAgIHNwcmludGYoZXJyb3JCdWZmZXIsCi0gICAgICAgICAgICAgICAgIkZhdGFsIGVycm9yOiBDb3VsZCBub3Qgb3BlbiBsaWJyYXJ5ICclcyciLCBsaWJOYW1lKTsKLSAgICAgICAgcGVycm9yIChlcnJvckJ1ZmZlcik7Ci0gICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlKTsKKyAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlICk7CiAgICAgfQogCi0gICAgaW50ICAgICAgIHJldCA9IDA7Ci0gICAgTGlua19tYXAgKmZpcnN0TGliICAgPSBOVUxMOworICAgIC8vCisgICAgLy8gSXRzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBjb3B5IGJlY2F1c2Ugc3RydG9rKCkgbW9kaWZpZXMgdGhlCisgICAgLy8gc3RyaW5nIGFzIGl0IHJldHVybnMgdG9rZW5zLiBXZSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgc3RyaW5nCisgICAgLy8gcmV0dXJuZWQgdG8gYnkgZ2V0ZW52KCkuCisgICAgLy8KIAotICAgIHJldCA9IGRsaW5mbyhoYW5kbGUsIFJUTERfRElfTElOS01BUCwgKHZvaWQqKSAmZmlyc3RMaWIpOwotICAgIExpbmtfbWFwKiBuZXh0TGliID0gTlVMTDsKLSAgICBuZXh0TGliID0gZmlyc3RMaWI7CisgICAgbGliUGF0aCA9IG5ldyBjaGFyW3N0cmxlbihsaWJFbnZWYXIpICsgMV07CisgICAgc3RyY3B5KGxpYlBhdGgsIGxpYkVudlZhcik7CiAKLSAgICB3aGlsZSAobmV4dExpYikKKyAgICAvLyBGaXJzdCBkbyB0aGUgc2VhcmNoaW5nIHByb2Nlc3MgZm9yIHRoZSBmaXJzdCBkaXJlY3RvcnkgbGlzdGluZworICAgIGNoYXIqICBhbGxQYXRocyA9IGxpYlBhdGg7CisgICAgY2hhciogIGxpYlBhdGhOYW1lOworCisgICAgd2hpbGUgKChsaWJQYXRoTmFtZSA9IHN0cnRvayhhbGxQYXRocywgIjoiKSkgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGNoYXIqIGZpbGVOYW1lID0gbmV4dExpYi0+bF9uYW1lOwotICAgICAgICBpZiAoc3Ryc3RyKGZpbGVOYW1lLCBsaWJOYW1lKSAhPSBOVUxMKQorICAgICAgICBGSUxFKiAgZHVtbXlGcHRyID0gMDsKKyAgICAgICAgYWxsUGF0aHMgPSAwOworCisgICAgICAgIGNoYXIqIGxpYmZpbGUgPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpICsgc3RybGVuKGxpYk5hbWUpICsgMl07CisgICAgICAgIHN0cmNweShsaWJmaWxlLCBsaWJQYXRoTmFtZSk7CisgICAgICAgIHN0cmNhdChsaWJmaWxlLCAiLyIpOworICAgICAgICBzdHJjYXQobGliZmlsZSwgbGliTmFtZSk7CisKKyAgICAgICAgZHVtbXlGcHRyID0gKEZJTEUgKikgZm9wZW4obGliZmlsZSwgInJiIik7CisgICAgICAgIGRlbGV0ZSBbXSBsaWJmaWxlOworICAgICAgICBpZiAoZHVtbXlGcHRyICE9IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIqIGNvcHlUbyA9IHN0cnJjaHIoZmlsZU5hbWUsICcvJyk7Ci0gICAgICAgICAgICBzaXplX3QgY2hhcnNfdG9fZXh0cmFjdCA9IGNvcHlUbyAtIGZpbGVOYW1lOwotICAgICAgICAgICAgY2hhciAqbGliUGF0aE5hbWUgPSBuZXcgY2hhcltjaGFyc190b19leHRyYWN0ICsgMV07Ci0gICAgICAgICAgICBzdHJuY3B5KGxpYlBhdGhOYW1lLCBmaWxlTmFtZSwgY2hhcnNfdG9fZXh0cmFjdCk7Ci0gICAgICAgICAgICBsaWJQYXRoTmFtZVtjaGFyc190b19leHRyYWN0XSA9IDA7Ci0gICAgICAgICAgICBmZ0ludGxQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYlBhdGhOYW1lKSsgc3RybGVuKCIvaWN1L2RhdGEvIikrMV07Ci0gICAgICAgICAgICBzdHJjcHkoKGNoYXIgKikgZmdJbnRsUGF0aCwgbGliUGF0aE5hbWUpOwotICAgICAgICAgICAgc3RyY2F0KChjaGFyICopIGZnSW50bFBhdGgsICIvaWN1L2RhdGEvIik7Ci0gICAgICAgICAgICBkZWxldGUgbGliUGF0aE5hbWU7CisgICAgICAgICAgICBmY2xvc2UoZHVtbXlGcHRyKTsKKyAgICAgICAgICAgIGludGxQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYlBhdGhOYW1lKSsgc3RybGVuKCIvaWN1L2RhdGEvIikrMV07CisgICAgICAgICAgICBzdHJjcHkoKGNoYXIgKikgaW50bFBhdGgsIGxpYlBhdGhOYW1lKTsKKyAgICAgICAgICAgIHN0cmNhdCgoY2hhciAqKSBpbnRsUGF0aCwgIi9pY3UvZGF0YS8iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG5leHRMaWIgPSBuZXh0TGliLT5sX25leHQ7Ci0gICAgfQogCi0gICAgaWYgKGZnSW50bFBhdGggPT0gTlVMTCkKKyAgICB9IC8vIHdoaWxlCisKKyAgICBkZWxldGUgbGliUGF0aDsKKworICAgIElDVVRyYW5zU2VydmljZTo6c2V0SUNVUGF0aChpbnRsUGF0aCk7CisKKyAgICBpZiAoaW50bFBhdGggPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICJGYXRhbCBlcnJvcjogQ291bGQgbm90IGZpbmQgL2ljdS9kYXRhIHJlbGF0aXZlIHRvICVzIFxuIiwKLSAgICAgICAgICAgICAgICBsaWJOYW1lKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIAotICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgd2hpbGUgdHJ5aW5nIHRvIGF1dG8gZGV0ZWN0IHRoZSBsb2NhdGlvbiAiKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJvZiB0aGUgY29udmVydGVyIGZpbGVzLlxuIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgQW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnSUNVX0RBVEEnIGlzICIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vdCBkZWZpbmVkLlxuIik7Ci0gICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlKTsKKyAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlICk7CiAgICAgfQorICAgIGlmIChpbnRsUGF0aCAhPSBOVUxMKSBkZWxldGUgKGNoYXIqKWludGxQYXRoOwogCi0gICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGZnSW50bFBhdGgpOwogICAgIHJldHVybiBuZXcgSUNVVHJhbnNTZXJ2aWNlOwotCit9CisjZWxpZiBkZWZpbmVkIChYTUxfVVNFX0lDT05WX1RSQU5TQ09ERVIpCit7CisgICAgcmV0dXJuIG5ldyBJY29udlRyYW5zU2VydmljZTsKK30KICNlbHNlIC8vIFVzZSBOYXRpdmUgdHJhbnNjb2Rpbmcgc2VydmljZQotCit7CiAgICAgcmV0dXJuIG5ldyBJY29udlRyYW5zU2VydmljZTsKIAotI2VuZGlmCiB9CisjZW5kaWYKIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUwNiw0NyArNTk1LDc3IEBACiAKICNpZiAhZGVmaW5lZCAoQVBQX05PX1RIUkVBRFMpCiAKK2NsYXNzICBSZWN1cnNpdmVNdXRleAoreworcHVibGljOgorICAgIHB0aHJlYWRfbXV0ZXhfdCAgIG11dGV4OworICAgIGludCAgICAgICAgICAgICAgIHJlY3Vyc2lvbkNvdW50OworICAgIHB0aHJlYWRfdCAgICAgICAgIHRpZDsKKworICAgIFJlY3Vyc2l2ZU11dGV4KCkgeyAKKwkJICAgICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQoJm11dGV4LCBOVUxMKSkKKwkJCSAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90Q3JlYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uQ291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICB0aWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgIH5SZWN1cnNpdmVNdXRleCgpIHsKKwkJCWlmIChwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm11dGV4KSkKKwkJCSAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90RGVzdHJveSk7CisgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICB2b2lkIGxvY2soKSAgICAgIHsKKwkJCSAgaWYgKHB0aHJlYWRfZXF1YWwodGlkLCBwdGhyZWFkX3NlbGYoKSkpCisJCQkgIHsKKwkJCSAgICAgIHJlY3Vyc2lvbkNvdW50Kys7CisJCQkgICAgICByZXR1cm47CisJCQkgIH0KKwkJCSAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXgpICE9IDApCisJCQkgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90TG9jayk7CisJCQkgIHRpZCA9IHB0aHJlYWRfc2VsZigpOworCQkJICByZWN1cnNpb25Db3VudCA9IDE7CisJCSAgICAgIH07CisKKworICAgICB2b2lkIHVubG9jaygpICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tcmVjdXJzaW9uQ291bnQgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisJCQkgIGlmIChwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXgpICE9IDApCisJCQkgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90VW5sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgIH07CisKK3ZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpCit7CisgICAgcmV0dXJuIG5ldyBSZWN1cnNpdmVNdXRleDsKK307CisKKwogdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpjbG9zZU11dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKIHsKICAgICBpZiAobXR4SGFuZGxlID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobXV0ZXhfZGVzdHJveSggKG11dGV4X3QqKW10eEhhbmRsZSkpCi0gICAgewotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90RGVzdHJveSk7Ci0gICAgfQotICAgIGlmICgobXV0ZXhfdCopbXR4SGFuZGxlKQotICAgICAgICBkZWxldGUgbXR4SGFuZGxlOwotfQorICAgIFJlY3Vyc2l2ZU11dGV4ICpybSA9IChSZWN1cnNpdmVNdXRleCAqKW10eEhhbmRsZTsKKyAgICBkZWxldGUgcm07Cit9OworCiAKIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6bG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKIHsKICAgICBpZiAobXR4SGFuZGxlID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobXV0ZXhfbG9jayggKG11dGV4X3QqKW10eEhhbmRsZSkpCi0gICAgewotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90TG9jayk7Ci0gICAgfQorICAgIFJlY3Vyc2l2ZU11dGV4ICpybSA9IChSZWN1cnNpdmVNdXRleCAqKW10eEhhbmRsZTsKKyAgICBybS0+bG9jaygpOwogfQogCi12b2lkKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKQotewotICAgIG11dGV4X3QqIG11dGV4ID0gbmV3IG11dGV4X3Q7Ci0KLSAgICBpZiAobXV0ZXhfaW5pdChtdXRleCwgTlVMTCwgTlVMTCkpCi0gICAgewotICAgICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdENyZWF0ZSk7Ci0gICAgfQotICAgIHJldHVybiAodm9pZCopKG11dGV4KTsKLX0KIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6dW5sb2NrTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQogewogICAgIGlmIChtdHhIYW5kbGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtdXRleF91bmxvY2soIChtdXRleF90KiltdHhIYW5kbGUpKQotICAgIHsKLSAgICAgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RVbmxvY2spOwotICAgIH0KKyAgICBSZWN1cnNpdmVNdXRleCAqcm0gPSAoUmVjdXJzaXZlTXV0ZXggKiltdHhIYW5kbGU7CisgICAgcm0tPnVubG9jaygpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTY0LDEzICs2ODMsMjMgQEAKICAgICAvLyB0aGUgYmVsb3cgY2FsbHMgYXJlIHRlbXBvcmFyaWx5IG1hZGUgdGlsbCB0aGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHVzZXIgbGlicmFyeQogICAgIC8vIEN1cnJlbnRseSBpdHMgc3VwcG9ydGVkIG9ubHkgaW4gdGhlIGtlcm5lbCBtb2RlCiAKLSAgICBsb2NrTXV0ZXgoJmF0b21pY09wc011dGV4KTsKKyAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrKCBnQXRvbWljT3BNdXRleCkpCisgICAgeworCXByaW50ZigiY291bGQgbm90IGxvY2sgYXRvbWljT3BNdXRleFxuIik7CisJZXhpdCgxKTsKKwkvL2NhbGwgcGFuaWMgaW5zdGVhZAorICAgIH0KIAogICAgIHZvaWQgKnJldFZhbCA9ICp0b0ZpbGw7CiAgICAgaWYgKCp0b0ZpbGwgPT0gdG9Db21wYXJlKQogICAgICAgICAgICAgICAqdG9GaWxsID0gKHZvaWQgKiluZXdWYWx1ZTsKIAotICAgIHVubG9ja011dGV4KCZhdG9taWNPcHNNdXRleCk7CisgICAgaWYgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCBnQXRvbWljT3BNdXRleCkpCisgICAgeworCXByaW50ZigiY291bGQgbm90IHVubG9jayBhdG9taWNPcE11dGV4XG4iKTsKKwlleGl0KDEpOworCS8vY2FsbCBwYW5pYyBpbnN0ZWFkCisgICAgfQogCiAgICAgcmV0dXJuIHJldFZhbDsKIH0KQEAgLTU3OCwxNiArNzA3LDQxIEBACiBpbnQgWE1MUGxhdGZvcm1VdGlsczo6YXRvbWljSW5jcmVtZW50KGludCAmbG9jYXRpb24pCiB7CiAgICAgLy9yZXR1cm4gKGludClhdG9taWNfYWRkXzMyX252KCAodWludDMyX3QqKSZsb2NhdGlvbiwgMSk7Ci0gICAgWE1MTXV0ZXhMb2NrIGxvY2FsTG9jaygmYXRvbWljT3BzTXV0ZXgpOwogCi0gICAgcmV0dXJuICsrbG9jYXRpb247CisgICAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jayggZ0F0b21pY09wTXV0ZXgpKQorICAgIHsKKwlwcmludGYoImNvdWxkIG5vdCBsb2NrIGF0b21pY09wTXV0ZXhcbiIpOworCWV4aXQoMSk7CisJLy9jYWxsIHBhbmljIGluc3RlYWQKKyAgICB9CisgICAgaW50IHRtcCA9ICsrbG9jYXRpb247CisgICAgaWYgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCBnQXRvbWljT3BNdXRleCkpCisgICAgeworCXByaW50ZigiY291bGQgbm90IHVubG9jayBhdG9taWNPcE11dGV4XG4iKTsKKwlleGl0KDEpOworCS8vY2FsbCBwYW5pYyBpbnN0ZWFkCisgICAgfQorICAgIHJldHVybiB0bXA7CiB9CiBpbnQgWE1MUGxhdGZvcm1VdGlsczo6YXRvbWljRGVjcmVtZW50KGludCAmbG9jYXRpb24pCiB7CiAgICAgLy9yZXR1cm4gKGludClhdG9taWNfYWRkXzMyX252KCAodWludDMyX3QqKSZsb2NhdGlvbiwgLTEpOwotICAgIFhNTE11dGV4TG9jayBsb2NhbExvY2soJmF0b21pY09wc011dGV4KTsKIAotICAgIHJldHVybiAtLWxvY2F0aW9uOworICAgIGlmIChwdGhyZWFkX211dGV4X2xvY2soIGdBdG9taWNPcE11dGV4KSkKKyAgICB7CisJcHJpbnRmKCJjb3VsZCBub3QgbG9jayBhdG9taWNPcE11dGV4XG4iKTsKKwlleGl0KDEpOworCS8vY2FsbCBwYW5pYyBpbnN0ZWFkCisgICAgfQorCQorICAgIGludCB0bXAgPSAtLWxvY2F0aW9uOworICAgIGlmIChwdGhyZWFkX211dGV4X3VubG9jayggZ0F0b21pY09wTXV0ZXgpKQorICAgIHsKKwlwcmludGYoImNvdWxkIG5vdCB1bmxvY2sgYXRvbWljT3BNdXRleFxuIik7CisJZXhpdCgxKTsKKwkvL2NhbGwgcGFuaWMgaW5zdGVhZAorICAgIH0KKyAgICByZXR1cm4gdG1wOwogfQogCiAjZWxzZSAvLyAjaWYgIWRlZmluZWQgKEFQUF9OT19USFJFQURTKQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvUGxhdGZvcm1zL1dpbjMyL1ZlcnNpb24ucmMgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvVmVyc2lvbi5yYwppbmRleCA2OTU5ZWExLi5hMTM3MDdhIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvVmVyc2lvbi5yYworKysgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvVmVyc2lvbi5yYwpAQCAtMjksOCArMjksOCBAQAogLy8KIAogVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCi0gRklMRVZFUlNJT04gMywwLDAsMAotIFBST0RVQ1RWRVJTSU9OIDMsMCwwLDAKKyBGSUxFVkVSU0lPTiAxLDAsMCwwCisgUFJPRFVDVFZFUlNJT04gMSwwLDAsMAogIEZJTEVGTEFHU01BU0sgMHgzZkwKICNpZmRlZiBfREVCVUcKICBGSUxFRkxBR1MgMHgxTApAQCAtNDUsMTcgKzQ1LDE3IEBACiAgICAgQkVHSU4KICAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIgogICAgICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwgIkR5bmFtaWMgbGlua2VkIGxpYnJhcnkgZm9yIFhNTDRDMlwwIgotICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIkludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC5cMCIKLSAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiU2hhcmVkIExpYnJhcnkgZm9yIFhNTDRDIFZlcnNpb24gMy4wLjBcMCIKLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIzLCAwLCAwLCAwXDAiCi0gICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgIklYWE1MNEMzXzBfMFwwIgotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIElCTSBDb3JwLiAxOTk5IHN1YmplY3QgdG8gbGljZW5zaW5nIHRlcm1zXDAiCisgICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiRHluYW1pYyBsaW5rZWQgbGlicmFyeSBmb3IgWGVyY2VzLUNcMCIKKyAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvblwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJTaGFyZWQgTGlicmFyeSBmb3IgWGVyY2VzLUMgVmVyc2lvbiAxLjAuMFwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgIjEsIDAsIDAsIDBcMCIKKyAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAieGVyY2VzLWNfMV8wXzAuZGxsXDAiCisgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gMTk5OSBzdWJqZWN0IHRvIGxpY2Vuc2luZyB0ZXJtc1wwIgogICAgICAgICAgICAgVkFMVUUgIkxlZ2FsVHJhZGVtYXJrcyIsICJcMCIKLSAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgIklYWE1MNEMzXzAuZGxsXDAiCisgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJ4ZXJjZXMtY18xXzAuZGxsXDAiCiAgICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgIlwwIgotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlhNTDRDIFZlcnNpb24gMy4wLjBcMCIKLSAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICIzLCAwLCAwLCAwXDAiCisgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiWGVyY2VzLUMgVmVyc2lvbiAxLjAuMFwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIjEsIDAsIDAsIDBcMCIKICAgICAgICAgICAgIFZBTFVFICJTcGVjaWFsQnVpbGQiLCAiXDAiCiAgICAgICAgIEVORAogICAgIEVORApAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgMTYzOTggICAgICAgICAgICAgTCJceDAwNDFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNzJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNzNceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNzVceDAwNkVceDAwNkJceDAwNkVceDAwNkZceDAwNzdceDAwNkVceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwMjdceDAwN0JceDAwMzFceDAwN0RceDAwMjdceDAwIgogICAgIDE2Mzk5ICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDc3XHgwMDYxXHgwMDczXHgwMDIwXHgwMDc1XHgwMDczXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDQ0XHgwMDRGXHgwMDQzXHgwMDU0XHgwMDU5XHgwMDUwXHgwMDQ1XHgwMDIwXHgwMDYyXHgwMDc1XHgwMDc0XHgwMDIwXHgwMDZFXHgwMDY1XHgwMDc2XHgwMDY1XHgwMDcyXHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDY0XHgwMCIKICAgICAxNjQwMCAgICAgICAgICAgICBMIlx4MDA0NVx4MDA2RFx4MDA3MFx4MDA3NFx4MDA3OVx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA2OVx4MDA2NFx4MDAyMFx4MDA2Nlx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA2RFx4MDA2Rlx4MDA2NFx4MDA2NVx4MDA2Q1x4MDAzQVx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAiCi0gICAgMTY0MDEgICAgICAgICAgICAgTCJceDAwNDFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwMjdceDAwN0JceDAwN0JceDAwMzBceDAwN0RceDAwN0RceDAwN0JceDAwMzFceDAwN0RceDAwMjdceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjVceDAwNjRceDAwMjBceDAwNjZceDAwNkZceDAwNzJceDAwMjBceDAwNjVceDAwNkNceDAwNjVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwMjdceDAwN0JceDAwMzJceDAwN0RceDAwMjdceDAwIgorICAgIDE2NDAxICAgICAgICAgICAgIEwiXHgwMDQxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMxXHgwMDdEXHgwMDI3XHgwMCIKICAgICAxNjQwMiAgICAgICAgICAgICBMIlx4MDA0MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDA3M1x4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA3NFx4MDA3OVx4MDA3MFx4MDA2NVx4MDAyMFx4MDA0NVx4MDA0RVx4MDA1NFx4MDA0OVx4MDA1NFx4MDA1OVx4MDAyRlx4MDA0NVx4MDA0RVx4MDA1NFx4MDA0OVx4MDA1NFx4MDA0OVx4MDA0NVx4MDA1M1x4MDAyMFx4MDA2RFx4MDA3NVx4MDA3M1x4MDA3NFx4MDAyMFx4MDA3Mlx4MDA2NVx4MDA2Nlx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA3NFx4MDA2Rlx4MDAyMFx4MDA2MVx4MDA2RVx4MDAyMFx4MDA2NVx4MDA3OFx4MDA3NFx4MDA2NVx4MDA3Mlx4MDA2RVx4MDA2MVx4MDA2Q1x4MDAyQ1x4MDAyMFx4MDA3NVx4MDA2RVx4MDA3MFx4MDA2MVx4MDA3Mlx4MDA3M1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2NVx4MDA2RVx4MDA3NFx4MDA2OVx4MDA3NFx4MDA3OVx4MDAiCiAgICAgMTY0MDMgICAgICAgICAgICAgTCJceDAwNDFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNzJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNzNceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNzVceDAwNkVceDAwNkJceDAwNkVceDAwNkZceDAwNzdceDAwNkVceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNzlceDAwMjBceDAwMjdceDAwN0JceDAwMzFceDAwN0RceDAwMjdceDAwIgogICAgIDE2NDA0ICAgICAgICAgICAgIEwiXHgwMDRFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDZGXHgwMDc1XHgwMDY3XHgwMDY4XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDczXHgwMDIwXHgwMDc0XHgwMDZGXHgwMDIwXHgwMDZEXHgwMDYxXHgwMDc0XHgwMDYzXHgwMDY4XHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZFXHgwMDc0XHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDZEXHgwMDZGXHgwMDY0XHgwMDY1XHgwMDZDXHgwMDIwXHgwMDNBXHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMCIKQEAgLTMzOSw5ICszMzksMjIgQEAKICAgICA4MjcyICAgICAgICAgICAgICBMIlx4MDA1NVx4MDA2RVx4MDA2Qlx4MDA2RVx4MDA2Rlx4MDA3N1x4MDA2RVx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA2RFx4MDA2Rlx4MDA2NFx4MDA2NVx4MDA2Q1x4MDAyMFx4MDA3NFx4MDA3OVx4MDA3MFx4MDA2NVx4MDAiCiAgICAgODI3MyAgICAgICAgICAgICAgTCJceDAwNTVceDAwNkVceDAwNkJceDAwNkVceDAwNkZceDAwNzdceDAwNkVceDAwMjBceDAwNjNceDAwNkZceDAwNkVceDAwNzRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNzNceDAwNzBceDAwNjVceDAwNjNceDAwMjBceDAwNzRceDAwNzlceDAwNzBceDAwNjVceDAwIgogICAgIDgyNzQgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDY5XHgwMDY0XHgwMDIwXHgwMDc3XHgwMDYxXHgwMDczXHgwMDIwXHgwMDY5XHgwMDZFXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDY5XHgwMDY0XHgwMCIKLSAgICA4Mjc1ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2M1x4MDA2MVx4MDA2Q1x4MDA2Q1x4MDAyMFx4MDA3NFx4MDA2Rlx4MDAyMFx4MDA3M1x4MDA2M1x4MDA2MVx4MDA2RVx4MDA0RVx4MDA2NVx4MDA3OFx4MDA3NFx4MDAyOFx4MDAyOVx4MDAyMFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA2OVx4MDA2Q1x4MDA2Q1x4MDA2NVx4MDA2N1x4MDA2MVx4MDA2Q1x4MDAyMFx4MDA2MVx4MDA3NFx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA3NFx4MDA2OVx4MDA2RFx4MDA2NVx4MDAiCisgICAgODI3NSAgICAgICAgICAgICAgTCJceDAwNTdceDAwNjhceDAwNjVceDAwNkVceDAwMjBceDAwNzJceDAwNjVceDAwNzVceDAwNzNceDAwNjlceDAwNkVceDAwNjdceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwNjFceDAwNzRceDAwNkZceDAwNzJceDAwMkNceDAwMjBceDAwNkVceDAwNkZceDAwMjBceDAwNjlceDAwNkVceDAwNzRceDAwNjVceDAwNzJceDAwNkVceDAwNjFceDAwNkNceDAwMjBceDAwNzNceDAwNzVceDAwNjJceDAwNzNceDAwNjVceDAwNzRceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNjFceDAwNkNceDAwNkNceDAwNkZceDAwNzdceDAwNjVceDAwNjRceDAwIgorICAgIDgyNzYgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDYzXHgwMDYxXHgwMDZDXHgwMDZDXHgwMDIwXHgwMDc0XHgwMDZGXHgwMDIwXHgwMDczXHgwMDYzXHgwMDYxXHgwMDZFXHgwMDRFXHgwMDY1XHgwMDc4XHgwMDc0XHgwMDI4XHgwMDI5XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDY5XHgwMDZDXHgwMDZDXHgwMDY1XHgwMDY3XHgwMDYxXHgwMDZDXHgwMDIwXHgwMDYxXHgwMDc0XHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY5XHgwMDczXHgwMDIwXHgwMDc0XHgwMDY5XHgwMDZEXHgwMDY1XHgwMCIKIEVORAogCi0KICNlbmRpZiAgICAvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworCisjaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCisvLworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKKwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvUGxhdGZvcm1zL1dpbjMyL1dpbjMyUGxhdGZvcm1VdGlscy5jcHAgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvV2luMzJQbGF0Zm9ybVV0aWxzLmNwcAppbmRleCA0OWNhMDMwLi5iNGFmYTFmIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvV2luMzJQbGF0Zm9ybVV0aWxzLmNwcAorKysgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvV2luMzJQbGF0Zm9ybVV0aWxzLmNwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA2OjIxICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMiAyMDo0MToyNiAgYWJhZ2NoaQorICogQ2hhbmdlZCAnaW50bEZpbGVzL0xvY2FsZXMnIHRvICdpY3UvZGF0YScKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA2OjIxICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8wOCAyMDo0NTozMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY5NSw3ICs2OTgsNyBAQAogICAgIGlmICghOjpHZXRFbnZpcm9ubWVudFZhcmlhYmxlQSgiSUNVX0RBVEEiLCB0bXBCdWYsIDQwOTYpKQogICAgIHsKICAgICAgICAgc3RyY3B5KHRtcEJ1ZiwgZmdMaWJMb2NhdGlvbik7Ci0gICAgICAgIHN0cmNhdCh0bXBCdWYsICJpbnRsRmlsZXNcXExvY2FsZXNcXCIpOworICAgICAgICBzdHJjYXQodG1wQnVmLCAiaWN1XFxkYXRhXFwiKTsKICAgICAgICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKHRtcEJ1Zik7CiAgICAgfQogICAgIHJldHVybiBuZXcgSUNVVHJhbnNTZXJ2aWNlOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSUNVL0lDVVRyYW5zU2VydmljZS5jcHAgYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9JQ1UvSUNVVHJhbnNTZXJ2aWNlLmNwcAppbmRleCBlOWZkZWFiLi5mYzQxZGFhIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9UcmFuc2NvZGVycy9JQ1UvSUNVVHJhbnNTZXJ2aWNlLmNwcAorKysgYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9JQ1UvSUNVVHJhbnNTZXJ2aWNlLmNwcApAQCAtNTYsOCArNTYsMTggQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA2OjA3ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMi8wNyAyMzowODo0MSAgcm9kZGV5CisgKiBBZGQgaW4gY29kZSB0byB0ZXN0IGZvciBzb21lIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgcmVwb3J0IHRoZW0gYXMgd2hpdGVzcGFjZS4KKyAqIElDVSBpcyBub3QgZG9pbmcgdGhpcyBjdXJyZW50bHksIHNvIHdlIG5lZWQgdG8gZG8gaXQgdW50aWwgdGhleSBnZXQgdGhhdCBmaXhlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTggMjA6MTY6NTIgIGFiYWdjaGkKKyAqIE5vdyB3b3JrcyB3aXRoIElDVSAxLjMuMQorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xNyAyMjozNjo0MSAgcmFodWxqCisgKiBDb2RlIHdvcmtzIHdpdGggSUNVIHRyYW5zY29kaW5nIHNlcnZpY2UKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA2OjA3ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NTozMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTc3LDYgKzg3LDcgQEAKICNpbmNsdWRlIDx1c3RyaW5nLmg+CiAKIAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBJQ1VUcmFuc1NlcnZpY2U6IFB1YmxpYywgc3RhdGljIG1ldGhvZHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTYzLDYgKzE3NCwxOCBAQAogCiBib29sIElDVVRyYW5zU2VydmljZTo6aXNTcGFjZShjb25zdCBYTUxDaCB0b0NoZWNrKSBjb25zdAogeworICAgIC8vCisgICAgLy8gIDxUQkQ+CisgICAgLy8gIEZvciBub3csIHdlIHNob3J0IGNpcmN1aXQgc29tZSBvZiB0aGUgY29udHJvbCBjaGFycyBiZWNhdXNlIElDVQorICAgIC8vICBpcyBub3QgY29ycmVjdGx5IHJlcG9ydGluZyB0aGVtIGFzIHNwYWNlLiBMYXRlciwgd2hlbiB0aGV5IGNoYW5nZQorICAgIC8vICB0aGlzLCB3ZSBjYW4gZ2V0IHJpZCBvZiB0aGlzIHNwZWNpYWwgY2FzZS4KKyAgICAvLworICAgIGlmICgodG9DaGVjayA9PSAweDA5KQorICAgIHx8ICAodG9DaGVjayA9PSAweDBBKQorICAgIHx8ICAodG9DaGVjayA9PSAweDBEKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICByZXR1cm4gKFVuaWNvZGU6OmlzU3BhY2VDaGFyKHRvQ2hlY2spICE9IDApOwogfQogCkBAIC0xNzQsNyArMTk3LDcgQEAKICAgICAvLyAgd2hpY2ggd2lsbCBiYXNpY2FsbHkgY2F1c2UgdGhlIHN5c3RlbSB0byBnaXZlIHVwIGJlY2F1c2Ugd2UgcmVhbGx5IGNhbid0CiAgICAgLy8gIGRvIGFueXRoaW5nIHdpdGhvdXQgb25lLgogICAgIC8vCi0gICAgVUVycm9yQ29kZSB1ZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlIHVlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgVUNvbnZlcnRlciogY29udmVydGVyID0gdWNudl9vcGVuKE5VTEwsICZ1ZXJyKTsKICAgICBpZiAoIWNvbnZlcnRlcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xODksNyArMjEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICAgICAgIFhNTFRyYW5zU2VydmljZTo6Q29kZXMmIHJlc1ZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCB1bnNpZ25lZCBpbnQgICAgICAgICAgICBibG9ja1NpemUpCiB7Ci0gICAgVUVycm9yQ29kZSB1ZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlIHVlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgVUNvbnZlcnRlciogY29udmVydGVyID0gdWNudl9vcGVuVShlbmNvZGluZ05hbWUsICZ1ZXJyKTsKICAgICBpZiAoIWNvbnZlcnRlcikKICAgICB7CkBAIC0yMzksNyArMjYyLDcgQEAKIAogICAgIFhNTE11dGV4TG9jayBsb2NrQ29udmVydGVyKCZmTXV0ZXgpOwogCi0gICAgVUVycm9yQ29kZSBlcnIgPSBaRVJPX0VSUk9SOworICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIGNvbnN0IGludDMyX3QgdGFyZ2V0Q2FwID0gdWNudl9mcm9tVUNoYXJzCiAgICAgKAogICAgICAgICBmQ29udmVydGVyCkBAIC0yNDksNyArMjcyLDcgQEAKICAgICAgICAgLCAmZXJyCiAgICAgKTsKIAotICAgIGlmIChlcnIgIT0gQlVGRkVSX09WRVJGTE9XX0VSUk9SKQorICAgIGlmIChlcnIgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpdGFyZ2V0Q2FwOwpAQCAtMjYyLDcgKzI4NSw3IEBACiAKICAgICBYTUxNdXRleExvY2sgbG9ja0NvbnZlcnRlcigmZk11dGV4KTsKIAotICAgIFVFcnJvckNvZGUgZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKICAgICBjb25zdCBpbnQzMl90IHRhcmdldENhcCA9IHVjbnZfdG9VQ2hhcnMKICAgICAoCiAgICAgICAgIGZDb252ZXJ0ZXIKQEAgLTI3Myw3ICsyOTYsNyBAQAogICAgICAgICAsICZlcnIKICAgICApOwogCi0gICAgaWYgKGVyciAhPSBCVUZGRVJfT1ZFUkZMT1dfRVJST1IpCisgICAgaWYgKGVyciAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBTdWJ0cmFjdCBvbmUgc2luY2UgaXQgaW5jbHVkZXMgdGhlIHRlcm1pbmF0b3Igc3BhY2UKQEAgLTI5MSw3ICszMTQsNyBAQAogCiAgICAgWE1MTXV0ZXhMb2NrIGxvY2tDb252ZXJ0ZXIoJmZNdXRleCk7CiAKLSAgICBVRXJyb3JDb2RlIGVyciA9IFpFUk9fRVJST1I7CisgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgY29uc3QgY2hhciogc3RhcnRTcmMgPSBzcmNEYXRhOwogICAgIGNvbnN0IFhNTENoIGNoUmV0ID0gdWNudl9nZXROZXh0VUNoYXIKICAgICAoCkBAIC0zMDIsNyArMzI1LDcgQEAKICAgICApOwogCiAgICAgLy8gQmFpbCBvdXQgaWYgYW4gZXJyb3IKLSAgICBpZiAoRkFJTFVSRShlcnIpKQorICAgIGlmIChVX0ZBSUxVUkUoZXJyKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGJ5dGVzIGVhdGVuIGFuZCByZXR1cm4gdGhlIGNoYXIKQEAgLTMzNSw3ICszNTgsNyBAQAogICAgIHJldEJ1ZiA9IG5ldyBjaGFyW3RhcmdldExlbiArIDFdOwogCiAgICAgLy9Db252ZXJ0IHRoZSBVbmljb2RlIHN0cmluZyB0byBjaGFyKiB1c2luZyBJbnRsIHN0dWZmCi0gICAgVUVycm9yQ29kZSBlcnIgPSBaRVJPX0VSUk9SOworICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIGludDMyX3QgdGFyZ2V0Q2FwID0gdWNudl9mcm9tVUNoYXJzCiAgICAgKAogICAgICAgICBmQ29udmVydGVyCkBAIC0zNDYsMTYgKzM2OSwxNiBAQAogICAgICk7CiAKICAgICAvLyBJZiB0YXJnZXRMZW4gaXMgbm90IGVub3VnaCB0aGVuIGJ1ZmZlciBvdmVyZmxvdyBtaWdodCBvY2N1cgotICAgIGlmIChlcnIgPT0gQlVGRkVSX09WRVJGTE9XX0VSUk9SKQorICAgIGlmIChlcnIgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCiAgICAgewogICAgICAgICAvLyBSZXNldCB0aGUgZXJyb3IsIGRlbGV0ZSB0aGUgb2xkIGJ1ZmZlciwgYWxsb2NhdGUgYSBuZXcgb25lLCBhbmQgdHJ5IGFnYWluCi0gICAgICAgIGVyciA9IFpFUk9fRVJST1I7CisgICAgICAgIGVyciA9IFVfWkVST19FUlJPUjsKICAgICAgICAgZGVsZXRlIFtdIHJldEJ1ZjsKICAgICAgICAgcmV0QnVmID0gbmV3IGNoYXJbdGFyZ2V0Q2FwXTsKICAgICAgICAgdGFyZ2V0Q2FwID0gdWNudl9mcm9tVUNoYXJzKGZDb252ZXJ0ZXIsIHJldEJ1ZiwgdGFyZ2V0Q2FwLCB0b1RyYW5zY29kZSwgJmVycik7CiAgICAgfQogCi0gICAgaWYgKEZBSUxVUkUoZXJyKSkKKyAgICBpZiAoVV9GQUlMVVJFKGVycikpCiAgICAgewogICAgICAgICBkZWxldGUgW10gcmV0QnVmOwogICAgICAgICByZXR1cm4gMDsKQEAgLTM4NiwxMSArNDA5LDExIEBACiAKICAgICBYTUxNdXRleExvY2sgbG9ja0NvbnZlcnRlcigmZk11dGV4KTsKIAotICAgIFVFcnJvckNvZGUgZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKICAgICBpbnQzMl90IHRhcmdldENhcDsKICAgICB0YXJnZXRDYXAgPSB1Y252X2Zyb21VQ2hhcnMoZkNvbnZlcnRlciwgdG9GaWxsLCBtYXhDaGFycyArIDEsIHRvVHJhbnNjb2RlLCAmZXJyKTsKIAotICAgIGlmIChGQUlMVVJFKGVycikpCisgICAgaWYgKFVfRkFJTFVSRShlcnIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQyMiwxMCArNDQ1LDEwIEBACiAKICAgICAvLwogICAgIC8vICBIZXJlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgdGFyZ2V0IGxlbmd0aCB3aWxsIGJlIHNvIHVzZSAwIGFuZCBleHBlY3QKLSAgICAvLyAgYW4gQlVGRkVSX09WRVJGTE9XX0VSUk9SIGluIHdoaWNoIGNhc2UgaXQnZCBnZXQgcmVzb2x2ZWQgYnkgdGhlCisgICAgLy8gIGFuIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SIGluIHdoaWNoIGNhc2UgaXQnZCBnZXQgcmVzb2x2ZWQgYnkgdGhlCiAgICAgLy8gIGNvcnJlY3QgY2FwYWNpdHkgdmFsdWUuCiAgICAgLy8KLSAgICBVRXJyb3JDb2RlIGVyciA9IFpFUk9fRVJST1I7CisgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgaW50MzJfdCB0YXJnZXRDYXA7CiAgICAgdGFyZ2V0Q2FwID0gdWNudl90b1VDaGFycwogICAgICgKQEAgLTQzNywxMCArNDYwLDEwIEBACiAgICAgICAgICwgJmVycgogICAgICk7CiAKLSAgICBpZiAoZXJyICE9IEJVRkZFUl9PVkVSRkxPV19FUlJPUikKKyAgICBpZiAoZXJyICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGVyciA9IFpFUk9fRVJST1I7CisgICAgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIHJldFZhbCA9IG5ldyBYTUxDaFt0YXJnZXRDYXBdOwogICAgIHVjbnZfdG9VQ2hhcnMKICAgICAoCkBAIC00NTIsNyArNDc1LDcgQEAKICAgICAgICAgLCAmZXJyCiAgICAgKTsKIAotICAgIGlmIChGQUlMVVJFKGVycikpCisgICAgaWYgKFVfRkFJTFVSRShlcnIpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiByZXRWYWw7CkBAIC00NzgsNyArNTAxLDcgQEAKIAogICAgIFhNTE11dGV4TG9jayBsb2NrQ29udmVydGVyKCZmTXV0ZXgpOwogCi0gICAgVUVycm9yQ29kZSBlcnIgPSBaRVJPX0VSUk9SOworICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIGNvbnN0IGludDMyX3Qgc3JjTGVuID0gKGludDMyX3Qpc3RybGVuKHRvVHJhbnNjb2RlKTsKIAogICAgIHVjbnZfdG9VQ2hhcnMKQEAgLTQ5MSw3ICs1MTQsNyBAQAogICAgICAgICAsICZlcnIKICAgICApOwogCi0gICAgaWYgKEZBSUxVUkUoZXJyKSkKKyAgICBpZiAoVV9GQUlMVVJFKGVycikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUyNCw3ICs1NDcsNyBAQAogICAgIC8vICB3aGVuIHRoZSByYXcgaW5wdXQgYnVmZmVyIGhvbGRzIG1vcmUgY2hhcmFjdGVycyB0aGFuIHdpbGwgZml0CiAgICAgLy8gIGluIHRoZSBVbmljb2RlIG91dHB1dCBidWZmZXIuCiAgICAgLy8KLSAgICBVRXJyb3JDb2RlICBlcnIgPSBaRVJPX0VSUk9SOworICAgIFVFcnJvckNvZGUgIGVyciA9IFVfWkVST19FUlJPUjsKICAgICB1Y252X3RvVW5pY29kZQogICAgICgKICAgICAgICAgZkNvbnZlcnRlcgpAQCAtNTM3LDcgKzU2MCw3IEBACiAgICAgICAgICwgJmVycgogICAgICk7CiAKLSAgICBpZiAoKGVyciAhPSBaRVJPX0VSUk9SKSAmJiAoZXJyICE9IElOREVYX09VVE9GQk9VTkRTX0VSUk9SKSkKKyAgICBpZiAoKGVyciAhPSBVX1pFUk9fRVJST1IpICYmIChlcnIgIT0gVV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUikpCiAgICAgICAgIFRocm93WE1MKFRyYW5zY29kaW5nRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6OlRyYW5zX0NvdWxkTm90WENvZGVYTUxEYXRhKTsKIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgYnl0ZXMgZWF0ZW4gYW5kIHN0b3JlIGluIGNhbGxlcidzIHBhcmFtCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9UcmFuc2NvZGVycy9JQ1UvTWFrZWZpbGUuaW4gYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9JQ1UvTWFrZWZpbGUuaW4KaW5kZXggNTIwZWFhNC4uMmQ4ZWE0YiAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSUNVL01ha2VmaWxlLmluCisrKyBiL3NyYy91dGlsL1RyYW5zY29kZXJzL0lDVS9NYWtlZmlsZS5pbgpAQCAtNTUsMTYgKzU1LDMwIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDY6MDggIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8xNCAyMzo1MzozNCAgcmFodWxqCisjIFJlbW92ZWQgdGhlIG9mZmVuZGluZyBDdHJsLU0ncyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorIyBsb2dzIHdoaWNoIHdhcyBnaXZpbmcgcGFja2FnaW5nIHByb2JsZW1zLgorIworIyBQUjoKKyMgT2J0YWluZWQgZnJvbToKKyMgU3VibWl0dGVkIGJ5OgorIyBSZXZpZXdlZCBieToKKyMKKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAyOjAwOjU0ICByYWh1bGoKKyMgQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorIyBSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNjowOCAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MzQgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KLSM6CisjCiAjCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAotQ09NUElMRVIgPSBAY29tcGlsZXJACitDQyAgPSBAY2NACitDWFggPSBAY3h4QAogQ1hYRkxBR1MgPSBAY3h4ZmxhZ3NACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1RyYW5zY29kZXJzL0ljb252L0ljb252VHJhbnNTZXJ2aWNlLmNwcCBiL3NyYy91dGlsL1RyYW5zY29kZXJzL0ljb252L0ljb252VHJhbnNTZXJ2aWNlLmNwcAppbmRleCBmNTc1NmVkLi4wYWVjYzU5IDEwMDY0NAotLS0gYS9zcmMvdXRpbC9UcmFuc2NvZGVycy9JY29udi9JY29udlRyYW5zU2VydmljZS5jcHAKKysrIGIvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSWNvbnYvSWNvbnZUcmFuc1NlcnZpY2UuY3BwCkBAIC01Niw4ICs1NiwzMiBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDY6MTAgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS41ICAxOTk5LzEyLzE0IDIzOjUzOjM1ICByYWh1bGoKKyAqIFJlbW92ZWQgdGhlIG9mZmVuZGluZyBDdHJsLU0ncyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorICogbG9ncyB3aGljaCB3YXMgZ2l2aW5nIHBhY2thZ2luZyBwcm9ibGVtcy4KKyAqCisgKiBQUjoKKyAqIE9idGFpbmVkIGZyb206CisgKiBTdWJtaXR0ZWQgYnk6CisgKiBSZXZpZXdlZCBieToKKyAqCisgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTIvMDIgMjA6MjA6MTYgIHJhaHVsagorICogRml4ZWQgaW5jb3JyZWN0IGNvbXBhcmlzaW9uIG9mIGludCB3aXRoIGEgcG9pbnRlci4KKyAqIEdvdCBidXJudCBiZWNhdXNlIGRlZmluaXRpb24gb2YgTlVMTCB2YXJpZXMgb24gZGlmZmVyZW50IHBsYXRmb3JtcywKKyAqIHRob3VnaCB1c2Ugb2YgTlVMTCB3YXMgbm90IGNvcnJlY3QgaW4gdGhlIGZpcnN0IHBsYWNlLgorICoKKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8yMCAwMDoyODoxOSAgcmFodWxqCisgKiBBZGRlZCBjb2RlIGZvciBjYXNlLWluc2Vuc2l0aXZlIHdpZGUgY2hhcmFjdGVyIHN0cmluZyBjb21wYXJlcworICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xNyAyMTo1Mjo0OSAgYWJhZ2NoaQorICogQ2hhbmdlZCB3Y3NjYXNlY21wKCkgdG8gd2NzY21wKCkgdG8gbWFrZSBpdCB3b3JrIG9uIFNvbGFyaXMgYW5kIEFJWAorICogUFI6CisgKiBPYnRhaW5lZCBmcm9tOgorICogU3VibWl0dGVkIGJ5OgorICogUmV2aWV3ZWQgYnk6CisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNjoxMCAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjcgIDE5OTkvMTEvMDggMjA6NDU6MzQgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMTAsNjAgKzEzNCw0NyBAQAogaW50IEljb252VHJhbnNTZXJ2aWNlOjpjb21wYXJlSVN0cmluZyggIGNvbnN0ICAgWE1MQ2gqIGNvbnN0ICAgIGNvbXAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCBYTUxDaCogY29uc3QgICAgY29tcDIpCiB7Ci0gICAgdW5zaWduZWQgaW50ICBsZW50MSA9IGdldFdpZGVDaGFyTGVuZ3RoKGNvbXAxKTsKLSAgICB1bnNpZ25lZCBpbnQgIGxlbnQyID0gZ2V0V2lkZUNoYXJMZW5ndGgoY29tcDIpOworICAgIGNvbnN0IFhNTENoKiBjcHRyMSA9IGNvbXAxOworICAgIGNvbnN0IFhNTENoKiBjcHRyMiA9IGNvbXAyOwogCi0gICAgd2NoYXJfdCogICAgdG1wMSA9IG5ldyB3Y2hhcl90W2xlbnQxICsgMV07Ci0gICAgd2NoYXJfdCogICAgdG1wMiA9IG5ldyB3Y2hhcl90W2xlbnQyICsgMV07CisgICAgd2hpbGUgKCgqY3B0cjEgIT0gMCkgJiYgKCpjcHRyMiAhPSAwKSkKKyAgICB7CisgICAgICAgIHdpbnRfdCAgd2NoMSA9IHRvd3VwcGVyKCpjcHRyMSk7CisgICAgICAgIHdpbnRfdCAgd2NoMiA9IHRvd3VwcGVyKCpjcHRyMik7CisgICAgICAgIGlmICh3Y2gxIDwgd2NoMikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHdjaDEgPiB3Y2gyKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBjb25zdCBYTUxDaCogIHB0ciA9IGNvbXAxOwotICAgIHdjaGFyX3QqICAgICAgdGFyZ2V0ID0gdG1wMTsKLSAgICB3aGlsZSAoKnB0cisrKQotICAgICAgICAqdGFyZ2V0KysgPSAqcHRyOwotICAgICp0YXJnZXQgPSAweDAwOwotICAgIAotICAgIHB0ciA9IGNvbXAyOwotICAgIHRhcmdldCA9IHRtcDI7Ci0gICAgd2hpbGUgKCpwdHIrKykKLSAgICAgICAgKnRhcmdldCsrID0gKnB0cjsKLSAgICAqdGFyZ2V0ID0gMHgwMDsKLQotICAgIGludCByZXR2YWwgPSB3Y3NjYXNlY21wKHRtcDEsIHRtcDIpOwotCi0gICAgZGVsZXRlIFtdIHRtcDE7Ci0gICAgZGVsZXRlIFtdIHRtcDI7Ci0KLSAgICByZXR1cm4gcmV0dmFsOworICAgICAgICBjcHRyMSsrOworICAgICAgICBjcHRyMisrOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAorCiBpbnQgSWNvbnZUcmFuc1NlcnZpY2U6OmNvbXBhcmVOSVN0cmluZyggY29uc3QgICBYTUxDaCogY29uc3QgICAgY29tcDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGNvbnN0IFhNTENoKiBjb25zdCAgICBjb21wMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgdW5zaWduZWQgaW50ICAgIG1heENoYXJzKQogewotICAgIHVuc2lnbmVkIGludCAgbGVudDEgPSBnZXRXaWRlQ2hhckxlbmd0aChjb21wMSk7Ci0gICAgdW5zaWduZWQgaW50ICBsZW50MiA9IGdldFdpZGVDaGFyTGVuZ3RoKGNvbXAyKTsKKyAgICBjb25zdCBYTUxDaCogY3B0cjEgPSBjb21wMTsKKyAgICBjb25zdCBYTUxDaCogY3B0cjIgPSBjb21wMjsKIAotICAgIHdjaGFyX3QqICAgIHRtcDEgPSBuZXcgd2NoYXJfdFtsZW50MSArIDFdOwotICAgIHdjaGFyX3QqICAgIHRtcDIgPSBuZXcgd2NoYXJfdFtsZW50MiArIDFdOworICAgIHVuc2lnbmVkIGludCAgbiA9IDA7CisgICAgd2hpbGUgKCgqY3B0cjEgIT0gMCkgJiYgKCpjcHRyMiAhPSAwKSAmJiAobiA8IG1heENoYXJzKSkKKyAgICB7CisgICAgICAgIHdpbnRfdCAgd2NoMSA9IHRvd3VwcGVyKCpjcHRyMSk7CisgICAgICAgIHdpbnRfdCAgd2NoMiA9IHRvd3VwcGVyKCpjcHRyMik7CisgICAgICAgIGlmICh3Y2gxIDwgd2NoMikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHdjaDEgPiB3Y2gyKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBjb25zdCBYTUxDaCogIHB0ciA9IGNvbXAxOwotICAgIHdjaGFyX3QqICAgICAgdGFyZ2V0ID0gdG1wMTsKLSAgICB3aGlsZSAoKnB0cisrKQotICAgICAgICAqdGFyZ2V0KysgPSAqcHRyOwotICAgICp0YXJnZXQgPSAweDAwOwotICAgIAotICAgIHB0ciA9IGNvbXAyOwotICAgIHRhcmdldCA9IHRtcDI7Ci0gICAgd2hpbGUgKCpwdHIrKykKLSAgICAgICAgKnRhcmdldCsrID0gKnB0cjsKLSAgICAqdGFyZ2V0ID0gMHgwMDsKLQotICAgIGludCByZXR2YWwgPSB3Y3NuY2FzZWNtcCh0bXAxLCB0bXAyLCBtYXhDaGFycyk7Ci0KLSAgICBkZWxldGUgW10gdG1wMTsKLSAgICBkZWxldGUgW10gdG1wMjsKLQotICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIGNwdHIxKys7CisgICAgICAgIGNwdHIyKys7CisgICAgICAgIG4rKzsKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSWNvbnYvTWFrZWZpbGUuaW4gYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9JY29udi9NYWtlZmlsZS5pbgppbmRleCA1MmE5NWJkLi5jYmRkY2Q0IDEwMDY0NAotLS0gYS9zcmMvdXRpbC9UcmFuc2NvZGVycy9JY29udi9NYWtlZmlsZS5pbgorKysgYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9JY29udi9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMjEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNjoxMSAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4zICAxOTk5LzEyLzE0IDIzOjUzOjM1ICByYWh1bGoKKyMgUmVtb3ZlZCB0aGUgb2ZmZW5kaW5nIEN0cmwtTSdzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlCisjIGxvZ3Mgd2hpY2ggd2FzIGdpdmluZyBwYWNrYWdpbmcgcHJvYmxlbXMuCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDE6MDAgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCisjIFJldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA2OjExICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NTozNSAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjQsNyArNzcsOCBAQAogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACmRpZmYgLS1naXQgYS9zcmMvdXRpbC9UcmFuc2NvZGVycy9XaW4zMi9XaW4zMlRyYW5zU2VydmljZS5jcHAgYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9XaW4zMi9XaW4zMlRyYW5zU2VydmljZS5jcHAKaW5kZXggMzJjOTZkYS4uYzk1ZjBmZSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvVHJhbnNjb2RlcnMvV2luMzIvV2luMzJUcmFuc1NlcnZpY2UuY3BwCisrKyBiL3NyYy91dGlsL1RyYW5zY29kZXJzL1dpbjMyL1dpbjMyVHJhbnNTZXJ2aWNlLmNwcApAQCAtNTYsOCArNTYsMTQgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA2OjA0ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMSAxODo1NDoyNiAgcm9kZGV5CisgKiBTbWFsbCBzeW50YWN0aWNhbCBjaGFuZ2UgdG8gbWFrZSBpdCBjb21waWxlIHVuZGVyIEJvcmxhbmQncyBjb21waWxlci4KKyAqIEl0IGRvZXMgbm90IG1ha2UgaXQgd29yc2UgdW5kZXIgb3RoZXIgY29tcGlsZXJzLCBzbyB3aHkgbm90LiBCYXNpY2FsbHkKKyAqIGl0IHdhcyBqdXN0IGNoYW5naW5nIDo6aXN3c3BhY2UoKSB0byBpc3dzcGFjZSgpLCBpLmUuIGdldCByaWQgb2YgdGhlIDo6CisgKiBwcmVmaXgsIHdoaWNoIGZyZWFrZWQgb3V0IEJvcmxhbmQgZm9yIHNvbWUgcmVhc29uLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDY6MDQgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjM1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTAyLDcgKzEwOCw3IEBACiAKIGJvb2wgV2luMzJUcmFuc1NlcnZpY2U6OmlzU3BhY2UoY29uc3QgWE1MQ2ggdG9DaGVjaykgY29uc3QKIHsKLSAgICByZXR1cm4gKDo6aXN3c3BhY2UodG9DaGVjaykgIT0gMCk7CisgICAgcmV0dXJuIChpc3dzcGFjZSh0b0NoZWNrKSAhPSAwKTsKIH0KIAogWE1MVHJhbnNjb2RlciogV2luMzJUcmFuc1NlcnZpY2U6Om1ha2VOZXdEZWZUcmFuc2NvZGVyKCkKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1VSTC5ocHAgYi9zcmMvdXRpbC9VUkwuaHBwCmluZGV4IDgxYzI3ZTguLjFjNWI1ODIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1VSTC5ocHAKKysrIGIvc3JjL3V0aWwvVVJMLmhwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA1OjIyICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo0OTo1NiAgcmFodWxqCisgKiBDYW5ub3QgdXNlIGNsYXNzIHF1YWxpZmllciBpbiBjbGFzcyBkZWZuLiBDQyB1bmRlciBIUFVYIGlzIGhhcHB5LgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDU6MjIgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjE2ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTM4LDcgKzE0MSw3IEBACiAgICAgY29uc3QgWE1MQ2gqIGdldEhvc3QoKSBjb25zdDsKICAgICBjb25zdCBYTUxDaCogZ2V0UHJvdG9jb2woKSBjb25zdDsKICAgICBjb25zdCBYTUxDaCogZ2V0UGF0aCgpIGNvbnN0OwotICAgIFVSTDo6UHJvdG9jb2xzIGdldFR5cGUoKSBjb25zdDsKKyAgICBQcm90b2NvbHMgZ2V0VHlwZSgpIGNvbnN0OwogICAgIGNvbnN0IFhNTENoKiBnZXRVUkwoKSBjb25zdDsKIAogCkBAIC0xNjAsNyArMTYzLDcgQEAKICAgICAvLyAgUHJpdmF0ZSBoZWxwZXIgbWV0aG9kcwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgdm9pZCBjbGVhbnVwKCk7Ci0gICAgVVJMOjpQcm90b2NvbHMgZmluZFR5cGUodW5zaWduZWQgaW50JiBjdXJQb3MpIGNvbnN0OworICAgIFByb3RvY29scyBmaW5kVHlwZSh1bnNpZ25lZCBpbnQmIGN1clBvcykgY29uc3Q7CiAgICAgWE1MQ2ggZ2V0TmV4dENoKHVuc2lnbmVkIGludCYgcG9zLCBjb25zdCBib29sIGVuZE9rID0gZmFsc2UpIGNvbnN0OwogICAgIFhNTENoIHBlZWtOZXh0Q2godW5zaWduZWQgaW50IHBvcykgY29uc3Q7CiAgICAgdm9pZCBwYXJzZSgpOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvWE1MNENEZWZzLmhwcCBiL3NyYy91dGlsL1hNTDRDRGVmcy5ocHAKaW5kZXggZjY0Mzc3ZC4uNGJkZDk5OSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvWE1MNENEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9YTUw0Q0RlZnMuaHBwCkBAIC01Niw4ICs1NiwxNyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDU6MzUgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS40ICAxOTk5LzEyLzE2IDIzOjQ3OjEwICByYWh1bGoKKyAqIFVwZGF0ZWQgZm9yIHZlcnNpb24gMS4wLjEKKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMDEgMTc6MTY6MTYgIHJhaHVsagorICogQWRkZWQgc3VwcG9ydCBmb3IgSVJJWCA2LjUuNSB1c2luZyBTR0kgTUlQU3BybyBDKysgNy4zIGFuZCA3LjIxIGdlbmVyYXRpbmcgMzIgYml0IG9iamVjdHMuIENoYW5nZXMgc3VibWl0dGVkIGJ5IE1hcmMgU3R1ZXNzZWwKKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTAgMDI6MDI6NTEgIGFiYWdjaGkKKyAqIENoYW5nZWQgdmVyc2lvbiBudW1iZXJzCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNTozNSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MTkgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC03NCwxMiArODMsMTIgQEAKIC8vICBUaGVzZSBhcmUgdXBkYXRlZCBmb3IgZXZlcnkgYnVpbGQuIFRoZXkgbXVzdCBiZSBhdCB0aGUgdG9wIGJlY2F1c2UgdGhleQogLy8gIGNhbiBiZSB1c2VkIGJ5IHZhcmlvdXMgcGVyLWNvbXBpbGVyIGhlYWRlcnMgYmVsb3cuCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNkZWZpbmUgWE1MNENfRExMVmVyc2lvblN0ciAiM18wIgotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICAgIGdYTUw0Q1ZlcnNpb25TdHIgPSAiM18wIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCAgICBnWE1MNENGdWxsVmVyc2lvblN0ciA9ICIzXzBfMCI7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICAgZ1hNTDRDTWFqVmVyc2lvbiA9IDM7CisjZGVmaW5lIFhNTDRDX0RMTFZlcnNpb25TdHIgIjFfMCIKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCAgICBnWE1MNENWZXJzaW9uU3RyID0gIjFfMCI7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgICAgZ1hNTDRDRnVsbFZlcnNpb25TdHIgPSAiMV8wXzEiOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAgIGdYTUw0Q01halZlcnNpb24gPSAxOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAgIGdYTUw0Q01pblZlcnNpb24gPSAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAgIGdYTUw0Q1JldmlzaW9uICAgPSAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAgIGdYTUw0Q1JldmlzaW9uICAgPSAxOwogCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTEwLDYgKzExOSwxMCBAQAogI2luY2x1ZGUgICAgPHV0aWwvUGxhdGZvcm1zL0hQVVgvSFBVWERlZnMuaHBwPgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFhNTF9JUklYKQorI2luY2x1ZGUgICAgPHV0aWwvUGxhdGZvcm1zL0lSSVgvSVJJWERlZnMuaHBwPgorI2VuZGlmCisKICNpZiBkZWZpbmVkKFhNTF9UQU5ERU0pCiAjaW5jbHVkZSAgICA8dXRpbC9QbGF0Zm9ybXMvVGFuZGVtL1RhbmRlbURlZnMuaHBwPgogI2VuZGlmCkBAIC0xNjQsNiArMTc3LDEwIEBACiAjaW5jbHVkZSAgICA8dXRpbC9Db21waWxlcnMvSFBDQ0RlZnMuaHBwPgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFhNTF9NSVBTUFJPX0NDKQorI2luY2x1ZGUgICAgPHV0aWwvQ29tcGlsZXJzL01JUFNwcm9EZWZzLmhwcD4KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChYTUxfVEFOREVNQ0MpCiAjaW5jbHVkZSAgICA8dXRpbC9Db21waWxlcnMvVGFuZGVtQ0NEZWZzLmhwcD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvWE1MRXhjZXB0aW9uLmNwcCBiL3NyYy91dGlsL1hNTEV4Y2VwdGlvbi5jcHAKaW5kZXggZGJlNTZkZS4uMGRlOTU0OCAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvWE1MRXhjZXB0aW9uLmNwcAorKysgYi9zcmMvdXRpbC9YTUxFeGNlcHRpb24uY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDU6MzkgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAyIDE5OjAyOjU3ICByb2RkZXkKKyAqIEdldCByaWQgb2YgYSBmZXcgc3RhdGljYWxseSBkZWZpbmVkIFhNTE11dGV4IG9iamVjdHMsIGFuZCBsYXp5IGV2YWwgdGhlbQorICogdXNpbmcgYXRvbWljIGNvbXBhcmUgYW5kIHN3YXAuIEkgc29tZWhvdyBsZXQgaXQgZ2V0IGJ5IG1lIHRoYXQgd2UgZG9uJ3QKKyAqIHdhbnQgYW55IHN0YXRpYy9nbG9iYWwgb2JqZWN0cyBhdCBhbGwuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNTozOSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MTkgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC03OSwxNSArODQsMTAgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIExvY2FsIGRhdGEKIC8vCi0vLyAgZ01zZ011dGV4Ci0vLyAgICAgIFRoaXMgaXMgYSBtdXRleCB0aGF0IGlzIHVzZWQgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvIG91ciBvbmUgYW5kCi0vLyAgICAgIG9ubHkgZXhjZXB0aW9uIHRleHQgbWVzc2FnZSBsb2FkZXIuCi0vLwogLy8gIGdEZWZFcnJNc2cKIC8vICAgICAgRm9yIG5vdywgaWYgd2UgY2Fubm90IGxvYWQgYW4gZXhjZXB0aW9uIG1lc3NhZ2UsIHdlIGxvYWQgdXAgdGhlCiAvLyAgICAgIGRlZmF1bHQuCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyBYTUxNdXRleCAgICAgZ01zZ011dGV4Owogc3RhdGljIGNvbnN0IFhNTENoICBnRGVmRXJyTXNnW10gPSAKIHsKICAgICAgICAgY2hMYXRpbl9DLCBjaExhdGluX28sIGNoTGF0aW5fdSwgY2hMYXRpbl9sLCBjaExhdGluX2QKQEAgLTk4LDYgKzk4LDMwIEBACiB9OwogCiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIExvY2FsLCBzdGF0aWMgZnVuY3Rpb25zCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8KKy8vICBXZSBuZWVkIHRvIGZhdWx0IGluIHRoaXMgbXV0ZXguIEJ1dCwgc2luY2UgaXRzIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbgorLy8gIGl0c2VsZiwgd2UgaGF2ZSB0byBkbyB0aGlzIHRoZSBsb3cgbGV2ZWwgd2F5IHVzaW5nIGEgY29tcGFyZSBhbmQgc3dhcC4KKy8vCitzdGF0aWMgWE1MTXV0ZXgmIGdNc2dNdXRleCgpCit7CisgICAgc3RhdGljIFhNTE11dGV4KiBtc2dNdXRleCA9IDA7CisgICAgaWYgKCFtc2dNdXRleCkKKyAgICB7CisgICAgICAgIFhNTE11dGV4KiB0bXBNdXRleCA9IG5ldyBYTUxNdXRleDsKKyAgICAgICAgaWYgKFhNTFBsYXRmb3JtVXRpbHM6OmNvbXBhcmVBbmRTd2FwKCh2b2lkKiopJm1zZ011dGV4LCB0bXBNdXRleCwgMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNvbWVvbmUgYmVhdCB1cyB0byBpdCwgc28gbGV0J3MgY2xlYW4gdXAgb3VycworICAgICAgICAgICAgZGVsZXRlIHRtcE11dGV4OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAqbXNnTXV0ZXg7Cit9CisKKwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBMb2NhbCBtZXRob2RzCkBAIC0yMjEsNyArMjQ1LDcgQEAKIAogICAgIC8vIExvY2sgdGhlIG1lc3NhZ2UgbG9hZGVyIG11dGV4IGFuZCBsb2FkIHRoZSB0ZXh0CiAgICAgewotICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdNc2dNdXRleCk7CisgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ01zZ011dGV4KCkpOwogICAgICAgICBpZiAoIWdHZXRNc2dMb2FkZXIoKS5sb2FkTXNnKHRvTG9hZCwgZXJyVGV4dCwgbXNnU2l6ZSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZNc2cgPSBYTUxTdHJpbmc6OnJlcGxpY2F0ZShnRGVmRXJyTXNnKTsKQEAgLTI1MCw3ICsyNzQsNyBAQAogCiAgICAgLy8gTG9jayB0aGUgbWVzc2FnZSBsb2FkZXIgbXV0ZXggYW5kIGxvYWQgdGhlIHRleHQKICAgICB7Ci0gICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ01zZ011dGV4KTsKKyAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnTXNnTXV0ZXgoKSk7CiAgICAgICAgIGlmICghZ0dldE1zZ0xvYWRlcigpLmxvYWRNc2codG9Mb2FkLCBlcnJUZXh0LCBtc2dTaXplLCB0ZXh0MSwgdGV4dDIsIHRleHQzLCB0ZXh0NCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZNc2cgPSBYTUxTdHJpbmc6OnJlcGxpY2F0ZShnRGVmRXJyTXNnKTsKQEAgLTI3OSw3ICszMDMsNyBAQAogCiAgICAgLy8gTG9jayB0aGUgbWVzc2FnZSBsb2FkZXIgbXV0ZXggYW5kIGxvYWQgdGhlIHRleHQKICAgICB7Ci0gICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ01zZ011dGV4KTsKKyAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnTXNnTXV0ZXgoKSk7CiAgICAgICAgIGlmICghZ0dldE1zZ0xvYWRlcigpLmxvYWRNc2codG9Mb2FkLCBlcnJUZXh0LCBtc2dTaXplLCB0ZXh0MSwgdGV4dDIsIHRleHQzLCB0ZXh0NCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZNc2cgPSBYTUxTdHJpbmc6OnJlcGxpY2F0ZShnRGVmRXJyTXNnKTsKZGlmZiAtLWdpdCBhL3NyYy92YWxpZGF0b3JzL0RURC9EVERFbGVtZW50RGVjbC5ocHAgYi9zcmMvdmFsaWRhdG9ycy9EVEQvRFRERWxlbWVudERlY2wuaHBwCmluZGV4IDE4ZGNiMTIuLjdlM2Y3ZDEgMTAwNjQ0Ci0tLSBhL3NyYy92YWxpZGF0b3JzL0RURC9EVERFbGVtZW50RGVjbC5ocHAKKysrIGIvc3JjL3ZhbGlkYXRvcnMvRFREL0RUREVsZW1lbnREZWNsLmhwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAzOjMyICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo1MTowNCAgcmFodWxqCisgKiBDYW5ub3QgdXNlIGNsYXNzIHF1YWxpZmllciBpbiBjbGFzcyBkZWZuLiBDQyB1bmRlciBIUFVYIGlzIGhhcHB5LgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDM6MzIgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ1OjQwICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTQ0LDcgKzE0Nyw3IEBACiAgICAgRFREQXR0RGVmKiBnZXRBdHREZWYoY29uc3QgWE1MQ2gqIGNvbnN0IGF0dE5hbWUpOwogICAgIENvbnRlbnRTcGVjTm9kZSogZ2V0Q29udGVudFNwZWMoKTsKICAgICBjb25zdCBDb250ZW50U3BlY05vZGUqIGdldENvbnRlbnRTcGVjKCkgY29uc3Q7Ci0gICAgRFRERWxlbWVudERlY2w6Ok1vZGVsVHlwZXMgZ2V0TW9kZWxUeXBlKCkgY29uc3Q7CisgICAgTW9kZWxUeXBlcyBnZXRNb2RlbFR5cGUoKSBjb25zdDsKIAogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy92YWxpZGF0b3JzL0RURC9EVERWYWxpZGF0b3IuY3BwIGIvc3JjL3ZhbGlkYXRvcnMvRFREL0RURFZhbGlkYXRvci5jcHAKaW5kZXggMWJiMDgwNi4uZjIwZWRkMyAxMDA2NDQKLS0tIGEvc3JjL3ZhbGlkYXRvcnMvRFREL0RURFZhbGlkYXRvci5jcHAKKysrIGIvc3JjL3ZhbGlkYXRvcnMvRFREL0RURFZhbGlkYXRvci5jcHAKQEAgLTU2LDggKzU2LDEyIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowMzozNSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjA6MjQ6NDUgIHJvZGRleQorICogRml4ZXMgZm9yIGluY29ycmVjdCBkZWxldGlvbiBvZiB0ZW1wb3JhcnkgZGVjbCBvYmplY3RzLCB3aGljaCB3b3VsZCBjYXVzZQorICogYSBkb3VibGUgZGVsZXRlIHdoZW4gdGhlIHBhcnNlciBpcyBkZWxldGVkLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDM6MzUgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQ1OjQwICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNTc5LDcgKzU4MywxMCBAQAogCiAgICAgLy8gQW4gZW1wdHkgc3RyaW5nIGNhbm5vdCBiZSB2YWxpZCBmb3IgYW55IG9mIHRoZSBvdGhlciB0eXBlcwogICAgIGlmICghYXR0clZhbHVlWzBdKQorICAgIHsKICAgICAgICAgZW1pdEVycm9yKFhNTDRDVmFsaWQ6OkludmFsaWRFbXB0eUF0dFZhbHVlLCBmdWxsTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBTZWUgd2hldGhlciB3ZSBhcmUgZG9pbmcgbXVsdGlwbGUgdmFsdWVzIG9yIG5vdAogICAgIGNvbnN0IGJvb2wgbXVsdGlwbGVWYWx1ZXMgPQpkaWZmIC0tZ2l0IGEvc3JjL3ZhbGlkYXRvcnMvRFREL0RURFZhbGlkYXRvcjIuY3BwIGIvc3JjL3ZhbGlkYXRvcnMvRFREL0RURFZhbGlkYXRvcjIuY3BwCmluZGV4IDI3N2M5NzMuLjE3ZWYyNDEgMTAwNjQ0Ci0tLSBhL3NyYy92YWxpZGF0b3JzL0RURC9EVERWYWxpZGF0b3IyLmNwcAorKysgYi9zcmMvdmFsaWRhdG9ycy9EVEQvRFREVmFsaWRhdG9yMi5jcHAKQEAgLTU2LDggKzU2LDE2IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowMzozOCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTIvMDQgMDE6MTM6MTYgIHJvZGRleQorICogRml4ZWQgdGhlIGxvZ2ljIGZvciBjaGVja2luZyBmb3IgUElzIHRoYXQgc3RhcnQgd2l0aCAneG1sJy4gSXQgd2FzIGRvaW5nIGRvaW5nICJpZiAoc3RyaW5nSUNvbXBhcmUoKSkgIgorICogaW5zdGVhZCBvZiAiaWYgKCFzdHJpbmdJQ29tcGFyZSgpKS4KKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjA6MjQ6NDUgIHJvZGRleQorICogRml4ZXMgZm9yIGluY29ycmVjdCBkZWxldGlvbiBvZiB0ZW1wb3JhcnkgZGVjbCBvYmplY3RzLCB3aGljaCB3b3VsZCBjYXVzZQorICogYSBkb3VibGUgZGVsZXRlIHdoZW4gdGhlIHBhcnNlciBpcyBkZWxldGVkLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDM6MzggIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQ1OjQyICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMzgyLDE5ICszOTAsMjQgQEAKICAgICAgICAgLy8gSXQgYWxyZWFkeSBleGlzdHMsIHNvIHB1dCBvdXQgYSB3YXJuaW5nCiAgICAgICAgIGdldFNjYW5uZXIoKS0+ZW1pdEVycm9yKFhNTDRDRXJyczo6QXR0TGlzdEFscmVhZHlFeGlzdHMsIGJ1ZlRvVXNlLmdldFJhd0J1ZmZlcigpKTsKIAotICAgICAgICAvLyBVc2UgdGhlIGR1bW15IGRlY2wgdG8gcGFyc2UgaW50bworICAgICAgICAvLyBVc2UgdGhlIGR1bW15IGRlY2wgdG8gcGFyc2UgaW50byBhbmQgc2V0IGl0cyBuYW1lIHRvIHRoZSBuYW1lIHdlIGdvdAogICAgICAgICBpZiAoIWZEdW1BdHREZWYpCisgICAgICAgIHsKICAgICAgICAgICAgIGZEdW1BdHREZWYgPSBuZXcgRFREQXR0RGVmOworICAgICAgICAgICAgZkR1bUF0dERlZi0+c2V0SWQoZk5leHRBdHRySWQrKyk7CisgICAgICAgIH0KICAgICAgICAgZkR1bUF0dERlZi0+c2V0TmFtZShidWZUb1VzZS5nZXRSYXdCdWZmZXIoKSk7CiAgICAgICAgIGRlY2wgPSBmRHVtQXR0RGVmOwogICAgIH0KICAgICAgZWxzZQogICAgIHsKLSAgICAgICAgLy8gSXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBzbyBjcmVhdGUgYSBuZXcgb25lCisgICAgICAgIC8vCisgICAgICAgIC8vICBJdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IHNvIGNyZWF0ZSBhIG5ldyBvbmUsIGdpdmUgaXQgdGhlIG5leHQKKyAgICAgICAgLy8gIGF2YWlsYWJsZSB1bmlxdWUgaWQsIGFuZCBhZGQgaXQKKyAgICAgICAgLy8KICAgICAgICAgZGVjbCA9IG5ldyBEVERBdHREZWYoYnVmVG9Vc2UuZ2V0UmF3QnVmZmVyKCkpOwotCi0gICAgICAgIC8vIEdpdmUgaXQgdGhlIG5leHQgYXZhaWxhYmxlIHVuaXF1ZSBpZAogICAgICAgICBkZWNsLT5zZXRJZChmTmV4dEF0dHJJZCsrKTsKKyAgICAgICAgcGFyZW50RWxlbS5hZGRBdHREZWYoZGVjbCk7CiAgICAgfQogCiAgICAgLy8gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHdlIGFyZSBkb2luZyBhIGR1bW15IHBhcnNlCkBAIC00MzQsOCArNDQ3LDYgQEAKICAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgZ2V0U2Nhbm5lcigpLT5lbWl0RXJyb3IoWE1MNENFcnJzOjpFeHBlY3RlZEF0dHJpYnV0ZVR5cGUpOwotICAgICAgICAgICAgaWYgKGlzSWdub3JlZCkKLSAgICAgICAgICAgICAgICBkZWxldGUgZGVjbDsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNDU0LDExICs0NjUsNyBAQAogCiAgICAgICAgIGRlY2wtPnNldFR5cGUoWE1MQXR0RGVmOjpOb3RhdGlvbik7CiAgICAgICAgIGlmICghc2NhbkVudW1lcmF0aW9uKGJ1ZlRvVXNlLCB0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzSWdub3JlZCkKLSAgICAgICAgICAgICAgICBkZWxldGUgZGVjbDsKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAKICAgICAgICAgLy8gU2V0IHRoZSB2YWx1ZSBhcyB0aGUgZW51bWVyYXRpb24gZm9yIHRoaXMgZGVjbAogICAgICAgICBkZWNsLT5zZXRFbnVtZXJhdGlvbihidWZUb1VzZS5nZXRSYXdCdWZmZXIoKSk7CkBAIC00NjcsMTEgKzQ3NCw3IEBACiAgICAgewogICAgICAgICBkZWNsLT5zZXRUeXBlKFhNTEF0dERlZjo6RW51bWVyYXRpb24pOwogICAgICAgICBpZiAoIXNjYW5FbnVtZXJhdGlvbihidWZUb1VzZSwgZmFsc2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNJZ25vcmVkKQotICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWNsOwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBTZXQgdGhlIHZhbHVlIGFzIHRoZSBlbnVtZXJhdGlvbiBmb3IgdGhpcyBkZWNsCiAgICAgICAgIGRlY2wtPnNldEVudW1lcmF0aW9uKGJ1ZlRvVXNlLmdldFJhd0J1ZmZlcigpKTsKQEAgLTQ3OSw4ICs0ODIsNiBAQAogICAgICBlbHNlCiAgICAgewogICAgICAgICBnZXRTY2FubmVyKCktPmVtaXRFcnJvcihYTUw0Q0VycnM6OkV4cGVjdGVkQXR0cmlidXRlVHlwZSk7Ci0gICAgICAgIGlmIChpc0lnbm9yZWQpCi0gICAgICAgICAgICBkZWxldGUgZGVjbDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC00OTEsMTAgKzQ5Miw2IEBACiAgICAgLy8gQW5kIHRoZW4gc2NhbiBmb3IgdGhlIG9wdGlvbmFsIGRlZmF1bHQgdmFsdWUgZGVjbGFyYXRpb24KICAgICBzY2FuRGVmYXVsdERlY2woKmRlY2wpOwogCi0gICAgLy8gQWRkIHRoaXMgZ3V5IHRvIGVsZW1lbnQncyBhdHRyIGxpc3QgKGlmIG5vdCBpZ25vcmluZy4pCi0gICAgaWYgKCFpc0lnbm9yZWQpCi0gICAgICAgIHBhcmVudEVsZW0uYWRkQXR0RGVmKGRlY2wpOwotCiAgICAgLy8gSWYgdmFsaWRhdGluZywgdGhlbiBkbyBhIGNvdXBsZSBvZiB2YWxpZGF0aW9uIGNvbnN0cmFpbnRzCiAgICAgaWYgKGdldFNjYW5uZXIoKS0+Z2V0RG9WYWxpZGF0aW9uKCkpCiAgICAgewpAQCAtMTY0Niw3ICsxNjQzLDYgQEAKICAgICAvLyAgc2NhbiBvdmVyIHRoZSBjb250ZW50IG1vZGVsIHNvIHVzZSB0aGUgZHVtbXkgZGVjbGFyYXRpb24gdGhhdCB0aGUKICAgICAvLyAgcGFyc2luZyBjb2RlIGNhbiBmaWxsIGluLgogICAgIC8vCi0gICAgYm9vbCBpc05ldyA9IGZhbHNlOwogICAgIGlmIChkZWNsKQogICAgIHsKICAgICAgICAgaWYgKGRlY2wtPmlzRGVjbGFyZWQoKSkKQEAgLTE2NjIsMTcgKzE2NTgsMjAgQEAKICAgICB9CiAgICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8vIENyZWF0ZSB0aGUgbmV3IGVtcHR5IGRlY2xhcmF0aW9uIHRvIGZpbGwgaW4uIE1hcmsgaXQgZGVjbGFyZWQKKyAgICAgICAgLy8KKyAgICAgICAgLy8gIENyZWF0ZSB0aGUgbmV3IGVtcHR5IGRlY2xhcmF0aW9uIHRvIGZpbGwgaW4gYW5kIHB1dCBpdCBpbnRvCisgICAgICAgIC8vICB0aGUgZGVjbCBwb29sLgorICAgICAgICAvLwogICAgICAgICBkZWNsID0gbmV3IERUREVsZW1lbnREZWNsKGJiTmFtZS5nZXRSYXdCdWZmZXIoKSk7Ci0gICAgICAgIGlzTmV3ID0gdHJ1ZTsKLQotICAgICAgICAvLyBQdXQgaXQgaW4gdGhlIGVsZW1lbnQgZGVjbCBwb29sCiAgICAgICAgIGZFbGVtRGVjbFBvb2wtPnB1dChkZWNsKTsKICAgICB9CiAKICAgICAvLyBTZXQgYSBmbGFnIGZvciB3aGV0aGVyIHdlIHdpbGwgaWdub3JlIHRoaXMgb25lCiAgICAgY29uc3QgYm9vbCBpc0lnbm9yZWQgPSAoZGVjbCA9PSBmRHVtRWxlbURlY2wpOwogCisgICAgLy8gTWFyayB0aGlzIG9uZSBhcyBiZWluZyBkZWNsYXJlZAorICAgIGRlY2wtPnNldENyZWF0ZVJlYXNvbihYTUxFbGVtZW50RGVjbDo6RGVjbGFyZWQpOworCiAgICAgLy8gQW5vdGhlciBjaGVjayBmb3IgYSBQRSByZWYsIHdpdGggYXQgbGVhc3QgcmVxdWlyZWQgd2hpdGVzcGFjZQogICAgIGlmICghY2hlY2tGb3JQRVJlZih0cnVlLCBmYWxzZSwgdHJ1ZSkpCiAgICAgICAgIGdldFNjYW5uZXIoKS0+ZW1pdEVycm9yKFhNTDRDRXJyczo6RXhwZWN0ZWRXaGl0ZXNwYWNlKTsKQEAgLTE2ODEsMTggKzE2ODAsMTIgQEAKICAgICBpZiAoIXNjYW5Db250ZW50U3BlYygqZGVjbCkpCiAgICAgewogICAgICAgICBnZXRSZWFkZXJNZ3IoKS0+c2tpcFBhc3RDaGFyKGNoQ2xvc2VBbmdsZSk7Ci0gICAgICAgIGlmIChpc05ldykKLSAgICAgICAgICAgIGRlbGV0ZSBkZWNsOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQW5vdGhlciBjaGVjayBmb3IgYSBQRSByZWYsIGJ1dCB3ZSBkb24ndCByZXF1aXJlIHdoaXRlc3BhY2UgaGVyZQogICAgIGNoZWNrRm9yUEVSZWYoZmFsc2UsIGZhbHNlLCB0cnVlKTsKIAotICAgIC8vIElmIHRoaXMgaXMgbm90IG9uZSB3ZSBhcmUgaWdub3JpbmcsIHRoZW4gc2V0IGl0IGRlY2xhcmVkCi0gICAgaWYgKCFpc0lnbm9yZWQpCi0gICAgICAgIGRlY2wtPnNldENyZWF0ZVJlYXNvbihYTUxFbGVtZW50RGVjbDo6RGVjbGFyZWQpOwotCiAgICAgLy8gQW5kIHdlIHNob3VsZCBoYXZlIHRoZSBlbmRpbmcgYW5nbGUgYnJhY2tldAogICAgIGlmICghZ2V0UmVhZGVyTWdyKCktPnNraXBwZWRDaGFyKGNoQ2xvc2VBbmdsZSkpCiAgICAgewpAQCAtMTcwNywxMyArMTcwMCw3IEBACiAgICAgLy8gIGlmIGFkdmFuY2VkIGNhbGxiYWNrcyBhcmUgZW5hYmxlZC4KICAgICAvLwogICAgIGlmIChmRG9jVHlwZUhhbmRsZXIpCi0gICAgewotICAgICAgICBmRG9jVHlwZUhhbmRsZXItPmVsZW1lbnREZWNsCi0gICAgICAgICgKLSAgICAgICAgICAgICpkZWNsCi0gICAgICAgICAgICAsIGlzSWdub3JlZAotICAgICAgICApOwotICAgIH0KKyAgICAgICAgZkRvY1R5cGVIYW5kbGVyLT5lbGVtZW50RGVjbCgqZGVjbCwgaXNJZ25vcmVkKTsKIH0KIAogCkBAIC0xNzkxLDExICsxNzc4LDE4IEBACiAgICAgICAgIGVudGl0eURlY2wgPSBuZXcgRFRERW50aXR5RGVjbChiYk5hbWUuZ2V0UmF3QnVmZmVyKCkpOwogCiAgICAgICAgIC8vCi0gICAgICAgIC8vICBTZXQgdGhlIGRlY2xhcmF0aW9uIGxvY2F0aW9uLiBUaGUgcGFyYW1ldGVyIGluZGljYXRlcyB3aGV0aGVyCi0gICAgICAgIC8vICBpdHMgZGVjbGFyZWQgaW4gdGhlIGNvbnRlbnQvaW50ZXJuYWwgc3Vic2V0LCBzbyB3ZSBkbwotICAgICAgICAvLyAgd2hldGhlciBpdHMgbm90IGluIHRoZSBleHRlcm5hbCBzdWJzZXQuCisgICAgICAgIC8vICBTZXQgdGhlIGRlY2xhcmF0aW9uIGxvY2F0aW9uLiBUaGUgcGFyYW1ldGVyIGluZGljYXRlcyB3aGV0aGVyIGl0cworICAgICAgICAvLyAgZGVjbGFyZWQgaW4gdGhlIGNvbnRlbnQvaW50ZXJuYWwgc3Vic2V0LCBzbyB3ZSBrbm93IHdoZXRoZXIgb3Igbm90CisgICAgICAgIC8vICBpdHMgaW4gdGhlIGV4dGVybmFsIHN1YnNldC4KICAgICAgICAgLy8KICAgICAgICAgZW50aXR5RGVjbC0+c2V0RGVjbGFyZWRJbkludFN1YnNldChmSW50ZXJuYWxTdWJzZXQpOworCisgICAgICAgIC8vIEFkZCBpdCB0byB0aGUgYXBwcm9wcmlhdGUgZW50aXR5IGRlY2wgcG9vbAorICAgICAgICBpZiAoaXNQRURlY2wpCisgICAgICAgICAgICBmUEVudGl0eURlY2xQb29sLT5wdXQoZW50aXR5RGVjbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZFbnRpdHlEZWNsUG9vbC0+cHV0KGVudGl0eURlY2wpOworCiAgICAgfQogCiAgICAgLy8gU2V0IGEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGFyZSBpZ25vcmluZyB0aGlzIG9uZQpAQCAtMTgxNiw5ICsxODEwLDYgQEAKICAgICBpZiAoIXNjYW5FbnRpdHlEZWYoKmVudGl0eURlY2wsIGlzUEVEZWNsKSkKICAgICB7CiAgICAgICAgIGdldFJlYWRlck1ncigpLT5za2lwUGFzdENoYXIoY2hDbG9zZUFuZ2xlKTsKLSAgICAgICAgaWYgKCFpc0lnbm9yZWQpCi0gICAgICAgICAgICBkZWxldGUgZW50aXR5RGVjbDsKLQogICAgICAgICBnZXRTY2FubmVyKCktPmVtaXRFcnJvcihYTUw0Q0VycnM6OkV4cGVjdGVkRW50aXR5VmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTgzNCwzMSArMTgyNSwxMSBAQAogICAgIH0KIAogICAgIC8vCi0gICAgLy8gIEFuZCBhZGQgdGhpcyBndXkgdG8gdGhlIGFwcHJvcHJpYXRlIGVudGl0eSBkZWNsIHBvb2wsIGlmIGl0IHdhcwotICAgIC8vICBub3QgYW4gb3ZlcnJpZGUgb2YgYW4gZXhpc3RpbmcgZW50aXR5IHRoYXQgd2UganVzdCBwYXJzZWQgaW50byB0aGUKLSAgICAvLyAgZHVtbXkgZGVjbC4KLSAgICAvLwotICAgIGlmICghaXNJZ25vcmVkKQotICAgIHsKLSAgICAgICAgaWYgKGlzUEVEZWNsKQotICAgICAgICAgICAgZlBFbnRpdHlEZWNsUG9vbC0+cHV0KGVudGl0eURlY2wpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmRW50aXR5RGVjbFBvb2wtPnB1dChlbnRpdHlEZWNsKTsKLSAgICB9Ci0KLSAgICAvLwogICAgIC8vICBJZiB3ZSBoYXZlIGEgZG9jIHR5cGUgaGFuZGxlciwgdGhlbiBjYWxsIGl0LiBCdXQgb25seSBjYWxsIGl0IGZvcgogICAgIC8vICBpZ25vcmVkIGVsZW1lbnRzIGlmIGFkdmFuY2VkIGNhbGxiYWNrcyBhcmUgZW5hYmxlZC4KICAgICAvLwogICAgIGlmIChmRG9jVHlwZUhhbmRsZXIpCi0gICAgewotICAgICAgICBmRG9jVHlwZUhhbmRsZXItPmVudGl0eURlY2wKLSAgICAgICAgKAotICAgICAgICAgICAgKmVudGl0eURlY2wKLSAgICAgICAgICAgICwgaXNQRURlY2wKLSAgICAgICAgICAgICwgKGVudGl0eURlY2wgPT0gZkR1bUVudGl0eURlY2wpCi0gICAgICAgICk7Ci0gICAgfQorICAgICAgICBmRG9jVHlwZUhhbmRsZXItPmVudGl0eURlY2woKmVudGl0eURlY2wsIGlzUEVEZWNsLCBpc0lnbm9yZWQpOwogfQogCiAKQEAgLTMzMDMsNyArMzI3NCw3IEBACiAgICAgbmFtZVB0ciA9IGJiTmFtZS5nZXRSYXdCdWZmZXIoKTsKIAogICAgIC8vIFNlZSBpZiBpdCBpc3NvbWUgZm9ybSBvZiAneG1sJyBhbmQgZW1pdCBhIHdhcm5pbmcKLSAgICBpZiAoWE1MU3RyaW5nOjpjb21wYXJlSVN0cmluZyhuYW1lUHRyLCBYTUxVbmk6OmZnWE1MU3RyaW5nKSkKKyAgICBpZiAoIVhNTFN0cmluZzo6Y29tcGFyZUlTdHJpbmcobmFtZVB0ciwgWE1MVW5pOjpmZ1hNTFN0cmluZykpCiAgICAgICAgIGdldFNjYW5uZXIoKS0+ZW1pdEVycm9yKFhNTDRDRXJyczo6Tm9QSVN0YXJ0c1dpdGhYTUwpOwogCiAgICAgLy8gSWYgbmFtZXNwYWNlcyBhcmUgZW5hYmxlZCwgdGhlbiBubyBjb2xvbnMgYWxsb3dlZApkaWZmIC0tZ2l0IGEvc3JjL3ZhbGlkYXRvcnMvRFREL01ha2VmaWxlLmluIGIvc3JjL3ZhbGlkYXRvcnMvRFREL01ha2VmaWxlLmluCmluZGV4IDM1NmQ0MzYuLjEwNTQzZmYgMTAwNjQ0Ci0tLSBhL3NyYy92YWxpZGF0b3JzL0RURC9NYWtlZmlsZS5pbgorKysgYi9zcmMvdmFsaWRhdG9ycy9EVEQvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDIxIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDM6NDIgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8xNCAyMzo1MzozNiAgcmFodWxqCisjIFJlbW92ZWQgdGhlIG9mZmVuZGluZyBDdHJsLU0ncyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorIyBsb2dzIHdoaWNoIHdhcyBnaXZpbmcgcGFja2FnaW5nIHByb2JsZW1zLgorIworIyBQUjoKKyMgT2J0YWluZWQgZnJvbToKKyMgU3VibWl0dGVkIGJ5OgorIyBSZXZpZXdlZCBieToKKyMKKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAyOjAxOjA1ICByYWh1bGoKKyMgQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorIyBSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMzo0MiAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6NDMgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY0LDcgKzc3LDggQEAKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApAQCAtMTQwLDkgKzE1NCw2IEBACiAJQGZvciBmaWxlIGluICQoVkFMSURBVE9SU19EVERfQ1BQX1BVQkhFQURFUlMpOyBkbyBcCiAJcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQoU1VCTU9EVUxFKS8kJGZpbGU7IFwKIAlkb25lCi0JQGZvciBmaWxlIGluICQoVkFMSURBVE9SU19EVERfQ19GSUxFUyk7IGRvIFwKLQlybSAtZiAkKFhNTF9JTkNfRElSKS8kKE1PRFVMRSkvJChTVUJNT0RVTEUpLyQkZmlsZTsgXAotCWRvbmUKIAlAZWNobyAiUmVtb3ZpbmcgYWxsICQoTU9EVUxFKS8kKFNVQk1PRFVMRSkgb2JqZWN0IGZpbGVzIC4uLiIKIAlAZm9yIGZpbGUgaW4gJChWQUxJREFUT1JTX0RURF9DUFBfT0JKRUNUUyk7IGRvIFwKIAlybSAtZiAkKEFMTF9PQkpFQ1RTX0RJUikvJCRmaWxlOyBcCmRpZmYgLS1naXQgYS90ZXN0cy9ET00vRE9NTWVtVGVzdC9ET01NZW1UZXN0LmNwcCBiL3Rlc3RzL0RPTS9ET01NZW1UZXN0L0RPTU1lbVRlc3QuY3BwCmluZGV4IGQzY2JjNzMuLjk1OWUwZmIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0RPTS9ET01NZW1UZXN0L0RPTU1lbVRlc3QuY3BwCisrKyBiL3Rlc3RzL0RPTS9ET01NZW1UZXN0L0RPTU1lbVRlc3QuY3BwCkBAIC02Niw4ICs2NiwxNyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDI6NDMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzEwIDE4OjM1OjE1ICBhbmR5aAorICogUmVtb3ZlZCBzcHVyaW91cyBkZWJ1ZyBvdXRwdXQgZnJvbSBET01NZW1UZXN0LgorICogVWRhdGVkIE1TVkMgcHJvamVjdCBmaWxlcyBmb3IgUmVsZWFzZSBidWlsZCBvZiBET01UZXN0IGFuZCBET01NZW1UZXN0LAorICogICAgdGhlc2Ugd2VyZW4ndCBzZXQgdXAgYmVmb3JlLgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMyAwMDowMjoyNSAgYW5keWgKKyAqIERPTSB0ZXN0cyB1cGRhdGVkIHRvIGNhdGNoIERPTUV4Y2VwdGlvbiBieSByZWYuCisgKiBBZGRlZCB0ZXN0cyBvZiBET01TdHJpbmc6OnRyYW5zY29kZSgpIGFuZCBhcHBlbmQoKQorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDI6NDMgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQyOjI0ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzUsMTAgKzg0LDExIEBACiAgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8ZG9tL0RPTS5ocHA+CiAjaW5jbHVkZSA8ZG9tL0RvbU1lbURlYnVnLmhwcD4KICNpbmNsdWRlIDx1dGlsL1BsYXRmb3JtVXRpbHMuaHBwPgotI2luY2x1ZGUgPHV0aWwvRXhjZXB0aW9uLmhwcD4KKyNpbmNsdWRlIDx1dGlsL1hNTEV4Y2VwdGlvbi5ocHA+CiAjaW5jbHVkZSA8dXRpbC9TdGRPdXQuaHBwPgogCiAKQEAgLTY1MywxMCArNjYzLDkgQEAKICAgICAgICAgICAgICBET01fRWxlbWVudCBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCIhQEAgYmFkIGVsZW1lbnQgbmFtZSIpOwogICAgICAgICAgICAgIFRBU1NFUlQoZmFsc2UpOyAgLy8gRXhjZXB0aW9uIGFib3ZlIHNob3VsZCBwcmV2ZW50IHVzIHJlYWNoaW5nIGhlcmUuCiAgICAgICAgICB9Ci0gICAgICAgICBjYXRjaCAoIERPTV9ET01FeGNlcHRpb24gKmUpCisgICAgICAgICBjYXRjaCAoIERPTV9ET01FeGNlcHRpb24gJmUpCiAgICAgICAgICB7Ci0gICAgICAgICAgICAgVEFTU0VSVChlLT5jb2RlID09IERPTV9ET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUik7Ci0gICAgICAgICAgICAgZGVsZXRlIGU7CisgICAgICAgICAgICAgVEFTU0VSVChlLmNvZGUgPT0gRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoICguLi4pCiAgICAgICAgICB7CkBAIC03MTgsNiArNzI3LDMyIEBACiAgICAgVEVTVEVQSUxPRzsKIAogCisJLy8KKwkvLyBNaW5pbWFsIHRlc3Qgb2YgRE9NU3RyaW5nOjp0cmFuc2NvZGUoKQorCS8vCisJVEVTVFBST0xPRzsKKwl7CisJCXN0YXRpYyBjaGFyIHRlc3RTdHJbXSA9ICJUaGlzIGlzIG91ciB0ZXN0IHN0cmluZy4iOworCisJCURPTVN0cmluZyBET01UZXN0U3RyID0gdGVzdFN0cjsKKwkJY2hhciAqcm91bmRUcmlwU3RyaW5nID0gRE9NVGVzdFN0ci50cmFuc2NvZGUoKTsKKwkJVEFTU0VSVChzdHJjbXAodGVzdFN0ciwgcm91bmRUcmlwU3RyaW5nKSA9PSAwKTsKKwkJZGVsZXRlIHJvdW5kVHJpcFN0cmluZzsKKwl9CisgICAgVEVTVEVQSUxPRzsKKworCisgICAgLy8KKyAgICAvLyAgU3RyaW5nIGJ1ZyBzdWJtaXR0ZWQgYnkgRGF2aWQgQ2h1bmcKKyAgICAvLworCVRFU1RQUk9MT0c7CisJeworICAgICAgICBET01TdHJpbmcgZ3JlZXRpbmcoImhlbGxvIik7CisgICAgICAgIGdyZWV0aW5nLmFwcGVuZERhdGEoZ3JlZXRpbmcpOworICAgICAgICBUQVNTRVJUKGdyZWV0aW5nLmVxdWFscygiaGVsbG9oZWxsbyIpKTsKKyAgICB9CisgICAgVEVTVEVQSUxPRzsKKwogICAgIC8vCiAgICAgLy8gIFByaW50IEZpbmFsIGFsbG9jYXRpb24gc3RhdHMgZm9yIGZ1bGwgdGVzdAogICAgIC8vCmRpZmYgLS1naXQgYS90ZXN0cy9ET00vRE9NVGVzdC9EVGVzdC5jcHAgYi90ZXN0cy9ET00vRE9NVGVzdC9EVGVzdC5jcHAKaW5kZXggODIwYjk2ZC4uMWFhNjViMiAxMDA2NDQKLS0tIGEvdGVzdHMvRE9NL0RPTVRlc3QvRFRlc3QuY3BwCisrKyBiL3Rlc3RzL0RPTS9ET01UZXN0L0RUZXN0LmNwcApAQCAtNTYsOCArNTYsMTIgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAyOjM0ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMyAwMDowMjoyNSAgYW5keWgKKyAqIERPTSB0ZXN0cyB1cGRhdGVkIHRvIGNhdGNoIERPTUV4Y2VwdGlvbiBieSByZWYuCisgKiBBZGRlZCB0ZXN0cyBvZiBET01TdHJpbmc6OnRyYW5zY29kZSgpIGFuZCBhcHBlbmQoKQorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDI6MzQgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQyOjI0ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzYsOCArODAsMTIgQEAKICAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowMjozNCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MDI6MjUgIGFuZHloCisgKiBET00gdGVzdHMgdXBkYXRlZCB0byBjYXRjaCBET01FeGNlcHRpb24gYnkgcmVmLgorICogQWRkZWQgdGVzdHMgb2YgRE9NU3RyaW5nOjp0cmFuc2NvZGUoKSBhbmQgYXBwZW5kKCkKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjAyOjM0ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0MjoyNCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTg3LDcgKzk1LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgIkRUZXN0LmgiCiAjaW5jbHVkZSA8dXRpbC9QbGF0Zm9ybVV0aWxzLmhwcD4KLSNpbmNsdWRlIDx1dGlsL0V4Y2VwdGlvbi5ocHA+CisjaW5jbHVkZSA8dXRpbC9YTUxFeGNlcHRpb24uaHBwPgogI2luY2x1ZGUgPHV0aWwvU3RkT3V0LmhwcD4KIAogCkBAIC05OCw5ICsxMDYsOSBAQAogICAgICAgICAgICAgb3BlcmF0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkV4Y2VwdGlvbnMgVGVzdCAjICVkOiBubyBFeGNlcHRpb24gdGhyb3duLlxuIiwgdGVzdE51bSk7IFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYXRjaCAoRE9NX0RPTUV4Y2VwdGlvbiAqZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNhdGNoIChET01fRE9NRXhjZXB0aW9uICZlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKGUtPmNvZGUgIT0gZXhwZWN0ZWRFeGNlcHRpb24pIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKGUuY29kZSAhPSBleHBlY3RlZEV4Y2VwdGlvbikgeyAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFeGNlcHRpb25zIFRlc3QgIyAlZDogd3JvbmcgRE9NX0RPTUV4Y2VwdGlvbiB0aHJvd24uXG4iLCBcCiAgICAgICAgICAgICAgICAgICAgIHRlc3ROdW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICByZXN1bHRGbGFnID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvdGVzdHMvVXRpbFRlc3RzL0NvcmVUZXN0c19UcmFuc2NvZGVycy5jcHAgYi90ZXN0cy9VdGlsVGVzdHMvQ29yZVRlc3RzX1RyYW5zY29kZXJzLmNwcAppbmRleCAyN2I3NmUzLi4wYWU5M2I1IDEwMDY0NAotLS0gYS90ZXN0cy9VdGlsVGVzdHMvQ29yZVRlc3RzX1RyYW5zY29kZXJzLmNwcAorKysgYi90ZXN0cy9VdGlsVGVzdHMvQ29yZVRlc3RzX1RyYW5zY29kZXJzLmNwcApAQCAtNTYsOCArNTYsMTIgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAyOjAzICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wNyAyMzoxMTowMSAgcm9kZGV5CisgKiBBZGQgaW4gc29tZSBuZXcgdGVzdHMgZm9yIHRyYW5zY29kZXJzIGFuZCB1cGRhdGUgdGhlIFVSTCB0ZXN0cworICogYSBiaXQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMjowMyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDI6MjggIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02OSwyOSArNzMsMTAyIEBACiAvLyAgSW5jbHVkZXMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2luY2x1ZGUgIkNvcmVUZXN0cy5ocHAiCisjaW5jbHVkZSA8dXRpbC9KYW5pdG9yLmhwcD4KICNpbmNsdWRlIDx1dGlsL1BsYXRmb3JtVXRpbHMuaHBwPgogI2luY2x1ZGUgPHV0aWwvVHJhbnNTZXJ2aWNlLmhwcD4KIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBMb2NhbCwgc3RhdGljIGRhdGEKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICAgdGVzdFN0cjEgPSAiVGhlIHRlc3Qgc3RyaW5nIjsKK3N0YXRpYyBjb25zdCBYTUxDaCAgICAgICAgIHRlc3RTdHIyW10gPSAKK3sKKyAgICAgICAgY2hMYXRpbl9ULCBjaExhdGluX2gsIGNoTGF0aW5fZSwgY2hTcGFjZSwgY2hMYXRpbl90LCBjaExhdGluX2UKKyAgICAsICAgY2hMYXRpbl9zLCBjaExhdGluX3QsIGNoU3BhY2UsIGNoTGF0aW5fcywgY2hMYXRpbl90LCBjaExhdGluX3IKKyAgICAsICAgY2hMYXRpbl9pLCBjaExhdGluX24sIGNoTGF0aW5fZywgY2hOdWxsCit9Oworc3RhdGljIGNvbnN0IFhNTENoICAgICAgICAgdGVzdFN0cjNbXSA9IAoreworICAgICAgICBjaExhdGluX1QsIGNoTGF0aW5fSCwgY2hMYXRpbl9FLCBjaFNwYWNlLCBjaExhdGluX1QsIGNoTGF0aW5fRQorICAgICwgICBjaExhdGluX1MsIGNoTGF0aW5fVCwgY2hTcGFjZSwgY2hMYXRpbl9TLCBjaExhdGluX1QsIGNoTGF0aW5fUgorICAgICwgICBjaExhdGluX0ksIGNoTGF0aW5fTiwgY2hMYXRpbl9HLCBjaE51bGwKK307CisKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBMb2NhbCB0ZXN0IG1ldGhvZHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RhdGljIGJvb2wgYmFzaWNUZXN0cygpCitzdGF0aWMgYm9vbCBiYXNpY1RyYW5zU2VydmljZVRlc3RzKCkKIHsKLSAgICBjb25zdCBjaGFyKiBjb25zdCAgIHRlc3RTdHIxID0gIlRoZSB0ZXN0IHN0cmluZyI7Ci0gICAgY29uc3QgWE1MQ2ggICAgICAgICB0ZXN0U3RyMltdID0gCi0gICAgewotICAgICAgICAgICAgY2hMYXRpbl9ULCBjaExhdGluX2gsIGNoTGF0aW5fZSwgY2hTcGFjZSwgY2hMYXRpbl90LCBjaExhdGluX2UKLSAgICAgICAgLCAgIGNoTGF0aW5fcywgY2hMYXRpbl90LCBjaFNwYWNlLCBjaExhdGluX3MsIGNoTGF0aW5fdCwgY2hMYXRpbl9yCi0gICAgICAgICwgICBjaExhdGluX2ksIGNoTGF0aW5fbiwgY2hMYXRpbl9nLCBjaE51bGwKLSAgICB9OworICAgIGNvbnN0IFhNTENoKiBwc3pUbXA7CiAKKyAgICAvLyBUZXN0IHRoZSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24KKyAgICBpZiAoWE1MUGxhdGZvcm1VdGlsczo6ZmdUcmFuc1NlcnZpY2UtPmNvbXBhcmVJU3RyaW5nKHRlc3RTdHIyLCB0ZXN0U3RyMykpCisgICAgeworICAgICAgICBvdXRTdHJtIDw8ICJDYXNlIHNlbnNpdGl2ZSBjb21wYXJlIGZhaWxlZCIgPDwgRW5kTG47CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vICBUZXN0IHRoZSBjYXNlIHNlbnNpdGl2ZSBsZWFkaW5nIHN1YnN0cmluZyBjb21wYXJlLiBMb29wIHRocm91Z2ggYW5kCisgICAgLy8gIHRlc3QgaXQgZm9yIGVhY2ggbGVuZ3RoIHBvc3NpYmxlLiBUaGlzIHdpbGwgcHJvYmUgYm91bmRhcnkgY29uZGl0aW9ucworICAgIC8vICBob3BlZnVsbHkuCisgICAgLy8KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGVzdExlbiA9IFhNTFN0cmluZzo6c3RyaW5nTGVuKHRlc3RTdHIyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB0ZXN0SW5kID0gMDsgdGVzdEluZCA8IHRlc3RMZW47IHRlc3RJbmQrKykKKyAgICB7CisgICAgICAgIGlmIChYTUxQbGF0Zm9ybVV0aWxzOjpmZ1RyYW5zU2VydmljZS0+Y29tcGFyZU5JU3RyaW5nKHRlc3RTdHIyLCB0ZXN0U3RyMywgdGVzdEluZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFN0cm0gPDwgIkNhc2Ugc2Vuc2l0aXZlIGxlYWRpbmcgY29tcGFyZSBmYWlsZWQiIDw8IEVuZExuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyAgQ2hlY2sgdGhlIGlzU3BhY2UgQVBJLiBUaGlzIGlzIHRoZSBvbmx5IGdlbmVyYWxpemVkIGNoYXJhY3RlciB0eXBlCisgICAgLy8gIGNoZWNrIHRoYXQgd2UgbmVlZCAoYWxsIG90aGVycyBhcmUgWE1MIHNwZWNpZmljIGFuZCBkb25lIHZpYSBYTUwncworICAgIC8vICBjaGFyYWN0ZXIgdHlwZSB0YWJsZXMuKQorICAgIC8vCisgICAgc3RhdGljIGNvbnN0IFhNTENoIHRlc3RXU1tdID0geyBjaFNwYWNlLCBjaEhUYWIsIGNoTEYsIGNoQ1IsIGNoTnVsbCB9OworICAgIHBzelRtcCA9IHRlc3RXUzsKKyAgICB3aGlsZSAoKnBzelRtcCkKKyAgICB7CisgICAgICAgIGlmICghWE1MUGxhdGZvcm1VdGlsczo6ZmdUcmFuc1NlcnZpY2UtPmlzU3BhY2UoKnBzelRtcCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFN0cm0gPDwgImlzU3BhY2UoKSBmYWlsZWQgb24gY29kZSBwb2ludDogIgorICAgICAgICAgICAgICAgICAgICA8PCAodW5zaWduZWQgaW50KSpwc3pUbXAgPDwgRW5kTG47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcHN6VG1wKys7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IFhNTENoIHRlc3ROV1NbXSA9IHsgY2hEaWdpdF8wLCBjaExhdGluX0EsIGNoUG91bmQsIGNoTnVsbCB9OworICAgIHBzelRtcCA9IHRlc3ROV1M7CisgICAgd2hpbGUgKCpwc3pUbXApCisgICAgeworICAgICAgICBpZiAoWE1MUGxhdGZvcm1VdGlsczo6ZmdUcmFuc1NlcnZpY2UtPmlzU3BhY2UoKnBzelRtcCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFN0cm0gPDwgImlzU3BhY2UoKSBmYWlsZWQgb24gY29kZSBwb2ludDogIgorICAgICAgICAgICAgICAgICAgICA8PCAodW5zaWduZWQgaW50KSpwc3pUbXAgPDwgRW5kTG47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcHN6VG1wKys7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGJhc2ljVHJhbnNjb2RlclRlc3RzKCkKK3sKICAgICAvLwogICAgIC8vICBPaywgbGV0cyB0ZXN0IG91dCB0aGUgdmVyeSBiYXNpYyBzZW1hbnRpY3Mgb2YgdHJhbnNjb2RlcnMuIFRoaXMKICAgICAvLyAgd2lsbCB0ZXN0IHRoZSBwYXJ0aWN1bGFyIHRyYW5zY29kZXIgc3lzdGVtIGluc3RhbGxlZC4gRmlyc3Qgb2YgYWxsCiAgICAgLy8gIGxldHMgZ2V0IGEgZGVmYXVsdCB0cmFuc2NvZGVyLgogICAgIC8vCiAgICAgWE1MVHJhbnNjb2RlciogdGVzdFggPSBYTUxQbGF0Zm9ybVV0aWxzOjpmZ1RyYW5zU2VydmljZS0+bWFrZU5ld0RlZlRyYW5zY29kZXIoKTsKKyAgICBKYW5pdG9yPFhNTFRyYW5zY29kZXI+IGphblhDb2Rlcih0ZXN0WCk7CiAKICAgICAvLyBBc2sgaXQgdG8gZG8gYSBiYXNpYyB0cmFuc2NvZGluZyBvZiBhIHN0cmluZyByb3VuZCB0cmlwCiAgICAgewpAQCAtMTE2LDE0ICsxOTMsMTQgQEAKIAogICAgIC8vIENoZWNrIHRoZSBtZXRob2RzIHRoYXQgY2FsY3VsYXRlIHJlcXVpcmVkIHN0b3JhZ2UKICAgICB7Ci0gICAgICAgIGlmICh0ZXN0WC0+Y2FsY1JlcXVpcmVkU2l6ZSh0ZXN0U3RyMSkgIT0gWE1MU3RyaW5nOjpzdHJpbmdMZW4odGVzdFN0cjEpKQorICAgICAgICBpZiAodGVzdFgtPmNhbGNSZXF1aXJlZFNpemUodGVzdFN0cjEpICE9IFhNTFN0cmluZzo6c3RyaW5nTGVuKHRlc3RTdHIyKSkKICAgICAgICAgewogICAgICAgICAgICAgb3V0U3RybSA8PCAiQ2FsY3VsYXRlZCBzaXplIHRvIHhjb2RlIGNoYXIgc3RyaW5nIHdhcyB3cm9uZyIKICAgICAgICAgICAgICAgICAgICAgPDwgRW5kTG47CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodGVzdFgtPmNhbGNSZXF1aXJlZFNpemUodGVzdFN0cjIpICE9IFhNTFN0cmluZzo6c3RyaW5nTGVuKHRlc3RTdHIyKSkKKyAgICAgICAgaWYgKHRlc3RYLT5jYWxjUmVxdWlyZWRTaXplKHRlc3RTdHIyKSAhPSBYTUxTdHJpbmc6OnN0cmluZ0xlbih0ZXN0U3RyMSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dFN0cm0gPDwgIkNhbGN1bGF0ZWQgc2l6ZSB0byB4Y29kZSBVbmljb2RlIHN0cmluZyB3YXMgd3JvbmciCiAgICAgICAgICAgICAgICAgICAgIDw8IEVuZExuOwpAQCAtMTQ5LDggKzIyNiwyMCBAQAogICAgIHRyeQogICAgIHsKICAgICAgICAgLy8gQ2FsbCBvdGhlciBsb2NhbCBtZXRob2RzIHRvIGRvIHNwZWNpZmljIHRlc3RzCi0gICAgICAgIG91dFN0cm0gPDwgIlRlc3RpbmcgYmFzaWMgdHJhbnNjb2RlciBzZW1hbnRpY3MiIDw8IEVuZExuOwotICAgICAgICBpZiAoIWJhc2ljVGVzdHMoKSkKKyAgICAgICAgb3V0U3RybSA8PCAiVGVzdGluZyBiYXNpYyB0cmFucyBzZXJ2aWNlIGZ1bmN0aW9ucyIgPDwgRW5kTG47CisgICAgICAgIGlmICghYmFzaWNUcmFuc1NlcnZpY2VUZXN0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRTdHJtIDw8ICJUcmFuc1NlcnZpY2UgYmFzaWMgdGVzdHMgZmFpbGVkIiA8PCBFbmRMbjsKKyAgICAgICAgICAgIHJldFZhbCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFN0cm0gPDwgIlRyYW5zU2VydmljZSBiYXNpYyB0ZXN0cyBwYXNzZWQiIDw8IEVuZExuOworICAgICAgICB9CisgICAgICAgIG91dFN0cm0gPDwgRW5kTG47CisKKyAgICAgICAgb3V0U3RybSA8PCAiVGVzdGluZyBiYXNpYyB0cmFuc2NvZGVyIGZ1bmN0aW9ucyIgPDwgRW5kTG47CisgICAgICAgIGlmICghYmFzaWNUcmFuc2NvZGVyVGVzdHMoKSkKICAgICAgICAgewogICAgICAgICAgICAgb3V0U3RybSA8PCAiVHJhbnNjb2RlciBiYXNpYyB0ZXN0cyBmYWlsZWQiIDw8IEVuZExuOwogICAgICAgICAgICAgcmV0VmFsID0gZmFsc2U7CmRpZmYgLS1naXQgYS90ZXN0cy9VdGlsVGVzdHMvQ29yZVRlc3RzX1VSTC5jcHAgYi90ZXN0cy9VdGlsVGVzdHMvQ29yZVRlc3RzX1VSTC5jcHAKaW5kZXggZmYzOWMwNi4uMmRmYjc0ZiAxMDA2NDQKLS0tIGEvdGVzdHMvVXRpbFRlc3RzL0NvcmVUZXN0c19VUkwuY3BwCisrKyBiL3Rlc3RzL1V0aWxUZXN0cy9Db3JlVGVzdHNfVVJMLmNwcApAQCAtNTYsOCArNTYsMTIgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAyOjA1ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wNyAyMzoxMTowMSAgcm9kZGV5CisgKiBBZGQgaW4gc29tZSBuZXcgdGVzdHMgZm9yIHRyYW5zY29kZXJzIGFuZCB1cGRhdGUgdGhlIFVSTCB0ZXN0cworICogYSBiaXQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMjowNSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDI6MjggIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC05Myw4ICs5Nyw4IEBACiAgICAgICAgICAgICAsICJmaWxlOi8vbXlmaWxlLnR4dCIKICAgICAgICAgICAgICwgMAogICAgICAgICB9OwotCiAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7CisKICAgICAgICAgd2hpbGUgKGJhZFVSTFNbaW5kZXhdKQogICAgICAgICB7CiAgICAgICAgICAgICBib29sIGdvdEl0ID0gZmFsc2U7CkBAIC0xMTIsNiArMTE2LDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRTdHJtIDw8ICJGYWlsZWQgdG8gZ2V0IGJhZCBVUkwgZXhjZXB0aW9uIGZvcjogIgogICAgICAgICAgICAgICAgICAgICAgICAgPDwgYmFkVVJMU1tpbmRleF0gPDwgRW5kTG47CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgfQpAQCAtMTIyLDExICsxMjcsMTMgQEAKICAgICAgICAgb3V0U3RybSA8PCAiR290IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLlxuICBUeXBlOiIKICAgICAgICAgICAgICAgICA8PCB0b0NhdGNoLmdldFR5cGUoKSA8PCAiLCBNZXNzYWdlOiIgPDwgdG9DYXRjaC5nZXRNZXNzYWdlKCkKICAgICAgICAgICAgICAgICA8PCBFbmRMbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGNhdGNoKC4uLikKICAgICB7CiAgICAgICAgIG91dFN0cm0gPDwgIkdvdCBhbiB1bmV4cGVjdGVkIHN5c3RlbSBleGNlcHRpb24uIiA8PCBFbmRMbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogCkBAIC0xNTUsNyArMTYyLDcgQEAKICAgICAgICAgICAgICAgICB0ZXN0VVJMLnNldFVSTCh1bnN1cHBvcnRlZFVSTFNbaW5kZXhdKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2F0Y2goY29uc3QgUnVudGltZUV4Y2VwdGlvbiYpCisgICAgICAgICAgICBjYXRjaChjb25zdCBNYWxmb3JtZWRVUkxFeGNlcHRpb24mKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdvdEl0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTE2NCw2ICsxNzEsNyBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG91dFN0cm0gPDwgIkZhaWxlZCB0byBnZXQgcnVudGltZSBleGNlcHRpb24gZm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICA8PCB1bnN1cHBvcnRlZFVSTFNbaW5kZXhdIDw8IEVuZExuOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgIH0KQEAgLTE3NCwxNCArMTgyLDE1IEBACiAgICAgICAgIG91dFN0cm0gPDwgIkdvdCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbi5cbiAgVHlwZToiCiAgICAgICAgICAgICAgICAgPDwgdG9DYXRjaC5nZXRUeXBlKCkgPDwgIiwgTWVzc2FnZToiIDw8IHRvQ2F0Y2guZ2V0TWVzc2FnZSgpCiAgICAgICAgICAgICAgICAgPDwgRW5kTG47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBjYXRjaCguLi4pCiAgICAgewogICAgICAgICBvdXRTdHJtIDw8ICJHb3QgYW4gdW5leHBlY3RlZCBzeXN0ZW0gZXhjZXB0aW9uLiIgPDwgRW5kTG47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLQogICAgIHJldHVybiB0cnVlOwogfQogCg==